
正文
vb.net线程主画面 vbnet thread
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
vb.net多线程,循环导致窗口界面假死的问题
1、正确的作法是,T定义为SomeSub这个函数为入口的线程,并启动它 在界面进度条更改的时候再使用Invoke来调用委托来进行界面更改。自己再好好看看吧,时间问题我要走了。
2、把它放在timer中,多次调用,造成假死。
3、“卡死”是一个非常主观的描述,如果你要让主线程杀掉卡死的线程,那么你必须给“卡死”做出准确的定义。
4、问题不是线程个数的问题,是你线程中的函数一直在调用settext和settext1两个函数,而这两个函数都是处于method 方法 的while的循环中,相当于不间歇的在使用 Me.Invoke(d, i)这个方法。
5、界面采用的是DockPanel布局方式 主界面frmMain(MDI窗口),子界面frmTree 在主界面加载的时候会先加载frmTree的数据(数据动态的,从数据库中查询),由于frmTree加载数据时会耗时,所以主界面在看起来会有点“假死”的效果。
相关问答
Q1: Vb.net,多线程,新线程启动后,界面响应变慢,但可以相应,怎么解决?_百...
用 t.Suspend() 这个是挂起线程。是一个异步方法。t.Sleep 我看了是一个同步方法。要等这个方法运行完了才继续下一步。这和from.show和 from.showdiaglog区别差不多!至于疑问2我也没找到原因。
你给出这些条件以后,杀掉一个线程就不难。Abort方法,Dispose方法,都可以。
可以用多线程,在子线程中更新控件,通过委托的方式通知主线程,可以有效缓解卡顿的问题。
DoEvents语句用的太多了,每次循环都会刷新,这跟不上计算的速度,比如说可以每100次循环执行一次DoEvents。
新线程等于没用 正确的作法是,T定义为SomeSub这个函数为入口的线程,并启动它 在界面进度条更改的时候再使用Invoke来调用委托来进行界面更改。自己再好好看看吧,时间问题我要走了。
Q2: 在vb.net中,多线程如何使用
主界面就不会卡死vb.net线程主画面了,只要在循环结束后将结果传回主线程调用就可以了,再复杂点要涉及到委托,控制了 按你vb.net线程主画面的要求其实你vb.net线程主画面的代码用不到多线程,只要把sleep放到两段代码中间就可以了。
首先,你把你那些要运行很久的过程。尽量放在一个过程中。因为线程只能是过程,不能使函数,没有返回值的。
1)当你将方法排入线程池队列后,此方法在有线程池线程变得可用时执行。
Q3: vb.net的多线程问题为什么两个线程同时开始,导致每次输出结果不同_百度...
1、但是多核cpu就不一样了,他可以同时执行多个线程里的代码,这才是真正的“多线程”。所以你那段程序,在单核的电脑上跑应该是没有问题的,但是在多核cpu的电脑上出现的结果就会有很大的随机性。
2、.net 为了安全,默认不允许跨线程访问操作控件。只能谁创建了控件,谁操作。这个textbox只能从主线程访问。解决方案一般有两个 使用委托机制。
3、用 t.Suspend() 这个是挂起线程。是一个异步方法。t.Sleep 我看了是一个同步方法。要等这个方法运行完了才继续下一步。这和from.show和 from.showdiaglog区别差不多!至于疑问2我也没找到原因。
4、简单实现的话可以试试BackgroundWorker控件来做比较简单。
5、多核心的CPU使用线程能提高处理能力。回到你的问题,主线程如果卡死,timer就会失去响应,很正常的。请使用System.Timers.Timer类吧。
Q4: 求教VB.net多线程问题
1、你可以在timer前用if判断网络状态,如断开,可用 threading.Thread.Sleep(10000) ‘当前线程挂起10秒 ’可以开一个新线程去读取脱机数据。如连接,则继续执行。
2、简单实现vb.net线程主画面的话可以试试BackgroundWorker控件来做比较简单。
3、你需要定义一个公共变量模块,来存储线程类里面vb.net线程主画面的变量。这样在线程结束后变量值都存在模块变量里面vb.net线程主画面了。当再次开启线程再把数据赋给类里面。
4、多线程就是这样的。界面线程是主线程,你这个Form_Load就是运行在主线程上的线程,而Thread1,Thread2是由主线程启动的。这个启动不是线性的。主线程只是通知系统,请启动一个线程运行某某函数。
5、Timer 是在 主线程里执行的,Thread 是在自己的线程中执行的,多核心的CPU使用线程能提高处理能力。回到你的问题,主线程如果卡死,timer就会失去响应,很正常的。请使用System.Timers.Timer类吧。
Q5: vb.net中开一个线程,直到新窗体启动完成
1、你可以在timer前用if判断网络状态,如断开,可用 threading.Thread.Sleep(10000) ‘当前线程挂起10秒 ’可以开一个新线程去读取脱机数据。如连接,则继续执行。
2、你是不是用的Visual Studio来开发的?如果是,这样操作:打开 项目 菜单 中的 XXX属性,在弹出的属性页选择最上面那个 应用程序 标签,里面有个启动窗体,你选择一下就可以了。
3、感觉问题出在 FormShow() 启动倒计时显示窗口 这一句上。这一句应该只需要执行一次就行了。把它放在timer中,多次调用,造成假死。
4、确实如xjnzhidao 讲的,很可能你没实例化,模块中的代码你不调用也是不执行的,尤其是写到模块里面的函数或者过程。
5、如果需要等待T2线程结束,那又何必开启这个线程!直接:LabelVisible = True setB()MsgBox(d)这不就是执行完setB(),再执行MsgBox(d),多线程是多余的。
6、问题1:刚才标记出错的那里,怎么样才能使它变成一个带参数的线程?目前我只能运行不带参数的线程,如何解决?定义一个类,然后。。
vb.net线程主画面的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vbnet thread、vb.net线程主画面的信息别忘了在本站进行查找喔。




