首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

在一个新的线程下部执行委派时UI被冻住了怎办

2014-04-18 
在一个新的线程底下执行委派时UI被冻住了怎办?小弟的问题如下 我开了一个新的线程 然后执行线程底下的子程

在一个新的线程底下执行委派时UI被冻住了怎办?
小弟的问题如下 

在一个新的线程下部执行委派时UI被冻住了怎办
我开了一个新的线程 然后执行线程底下的子程序时 我要调用委派来让

新线程可以跟UI线程沟通

但我要执行红色框选的代码时 发现UI被冻住了不能动

有什么方法可以让我在执行委派时 让UI线程依然可以正常动作呢?


[解决办法]
将Sub CC的异步调用委托BeginInvoke改为同步,即用Invoke,Sub CC的代码修改如下

  Do Until c = True
            Invoke(Sub()
                       Label1.Text = Now.Second
                   End Sub)
  Loop
[解决办法]
BeginInvoke执行的代码会在UI线程中执行,所以除非更新界面,尤其是耗时的代码,不要放在里面执行。
[解决办法]
至少,你可能需要写个 Thread.Sleep(300)。

但是为什么不重新设计业务流程,而使用Timer呢?

一个疯狂“燃烧CPU”的刷新操作,其实是没有意义的。人眼的分辨间隔时间可能也就是30毫秒。而对于更多情况,你可能会一个“定时器模式”来驱动许多必要的业务操作,例如检查一下是否需要开始闹钟,而不仅仅是让时钟数字跳动。
[解决办法]
人眼的分辨间隔时间可能也就是30毫秒  -->  人眼的分辨间隔时间可能也就是300毫秒

热点排行