我所说的语言是VB。
我在这个问题上挣扎了三个多星期,仍然没有解决方案。 问题如下: 我在子程序中运行了一个强烈的计算,同时在这个过程中修改了很多GUI。在很短的一段时间后,应用程序冻结并且没有响应"。计算完成后,一切都突然发生了我修改过的地步。没什么特别的。 但是,如果我现在尝试使用线程启动sub,那么应用程序不再冻结,我无法访问GUI,因为"它不是由线程本身创建的" #34 ;. 我该如何解决这个问题? 更具体地说:如何访问有关GUI的信息(特别是PictureBox的宽度和高度)并修改GUI(特别是在PictureBox中设置BackgroundPicture)? 任何帮助表示赞赏。谢谢!
答案 0 :(得分:0)
您需要了解如何使用Dispatcher
(MSDN Threading Model)
如果只有一个线程可以修改UI,那么后台线程如何与用户交互?后台线程可以要求UI线程代表它执行操作。它通过向UI线程的Dispatcher注册工作项来完成此操作。 Dispatcher类提供了两种注册工作项的方法:调用和 BeginInvoke 。两种方法都安排委托执行。 Invoke是一个同步调用 - 也就是说,直到UI线程实际完成执行委托才会返回。 BeginInvoke是异步的,并立即返回。
来自msdn文章链接中的示例的小代码:
startStopButton.Dispatcher
.BeginInvoke(DispatcherPriority.Normal,
New NextPrimeDelegate(AddressOf CheckNextNumber))