
正文
vb.net跨线程 vbnet 多线程
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
谁能分享一下vb.net多线程的简单例子,证明线程之间互不干扰,加上注释最...
多线程一般是不推荐用vb.net跨线程的,因为线程之间如果有共享资源的话会引起竞争,需要加锁处理vb.net跨线程;而且线程间没有时序关系,所以vb.net跨线程你在调试中可能会出现异步处理结束顺序与开始处理顺序不一致的情况(vb.net跨线程我在调试中已经发现该问题)。
委托,Delegate 就是让你处于这个线程里时,委托另一个线程去执行一些动作 我简单举一个写richtextbox的例子:/// 创建一个名为 MySubDelegate 的委托。
ListBox操作需要用Invoke。另外多线程方式并不是并行处理。建议采用.net framework 4 带的并行处理循环操作,若不是0版本的framework,可以使用Aforge的并行库比较方便。
首先,你把你那些要运行很久的过程。尽量放在一个过程中。因为线程只能是过程,不能使函数,没有返回值的。
容易出现非法操作。如果确实需要多线程的话,请使用控件,此处可以下载MThreadVB http://?txtCodeId=26900&lngWId=1 打字不易,如满意,望采纳。
你可以在timer前用if判断网络状态,如断开,可用 threading.Thread.Sleep(10000) ‘当前线程挂起10秒 ’可以开一个新线程去读取脱机数据。如连接,则继续执行。
相关问答
Q1: 请教VB.net中怎么跨线程调用控件
建议你使用BackGroundWorker控件。将代码写入控件的事件中,使用它的Start方法就可以开始工作了。是与主程序同时进行的。
要使用用户控件的实例成员,就先创建一个用户控件的实例,再通过实例名.实例成员名访问;要使用用户控件的共享(Shared)成员,通过用户控件类名.共享成员名访问。
new EventArgs())引发事件 ButtonClick.Invoke(me, new EventArgs())另外 RaiseEvent 也可以引发事件,但不能使用 RaiseEvent 来引发派生窗体的控件事件,只有自己定义的类的事件才能用它引发。如满意,请采纳,谢谢。
delUserFromUserList);this.Invoke(handler } else { //这里写真正要处理的动作 //以前弄过,具体不记得了。或者你在主线程里面创建这个控件,只是在其他线程里面用这个方法是用这个控件,我记得好像我是这样做的。
多核心的CPU使用线程能提高处理能力。回到你的问题,主线程如果卡死,timer就会失去响应,很正常的。请使用System.Timers.Timer类吧。
Public Class ks Inherits System.Windows.Forms.Form Region Windows 窗体设计器生成的代码 Public Sub New()MyBase.New()该调用是 Windows 窗体设计器所必需的。
Q2: vb.net如何跨线程访问控件
1、使用委托来实现跨线程调用控件。 定义一个委托,然后定义一个委托对象。
2、delUserFromUserList);this.Invoke(handler } else { //这里写真正要处理的动作 //以前弄过,具体不记得vb.net跨线程了。或者vb.net跨线程你在主线程里面创建这个控件,只是在其他线程里面用这个方法是用这个控件,我记得好像我是这样做的。
3、Timer 是在 主线程里执行的,Thread 是在自己的线程中执行的,多核心的CPU使用线程能提高处理能力。回到你的问题,主线程如果卡死,timer就会失去响应,很正常的。请使用System.Timers.Timer类吧。
4、如果直接调用 StartProgress,那该过程就在与MyThreadProc同一线程中运行,那么StartProgress过程中修改的控件不是在本线程创建的,就会出错。 。。
5、建议你使用BackGroundWorker控件。将代码写入控件的事件中,使用它的Start方法就可以开始工作了。是与主程序同时进行的。
6、并在创建窗口的那个线程里运行。参数是委托类型。me也可以改成控件名。如果直接调用 StartProgress,那该过程就在与MyThreadProc同一线程中运行,那么StartProgress过程中修改的控件不是在本线程创建的,就会出错。 。。
Q3: 求教VB.net多线程问题
1、你可以在timer前用if判断网络状态,如断开,可用 threading.Thread.Sleep(10000) ‘当前线程挂起10秒 ’可以开一个新线程去读取脱机数据。如连接,则继续执行。
2、简单实现的话可以试试BackgroundWorker控件来做比较简单。
3、多线程就是这样的。界面线程是主线程,你这个Form_Load就是运行在主线程上的线程,而Thread1,Thread2是由主线程启动的。这个启动不是线性的。主线程只是通知系统,请启动一个线程运行某某函数。
4、你需要定义一个公共变量模块,来存储线程类里面的变量。这样在线程结束后变量值都存在模块变量里面了。当再次开启线程再把数据赋给类里面。
关于vb.net跨线程和vbnet 多线程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







