VB中的线程与GUI

时间:2017-04-10 16:53:58

标签: vb.net multithreading user-interface

我所说的语言是VB。

我在这个问题上挣扎了三个多星期,仍然没有解决方案。 问题如下: 我在子程序中运行了一个强烈的计算,同时在这个过程中修改了很多GUI。在很短的一段时间后,应用程序冻结并且没有响应"。计算完成后,一切都突然发生了我修改过的地步。没什么特别的。 但是,如果我现在尝试使用线程启动sub,那么应用程序不再冻结,我无法访问GUI,因为"它不是由线程本身创建的" #34 ;. 我该如何解决这个问题? 更具体地说:如何访问有关GUI的信息(特别是PictureBox的宽度和高度)并修改GUI(特别是在PictureBox中设置BackgroundPicture)? 任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

您需要了解如何使用DispatcherMSDN Threading Model

  

如果只有一个线程可以修改UI,那么后台线程如何与用户交互?后台线程可以要求UI线程代表它执行操作。它通过向UI线程的Dispatcher注册工作项来完成此操作。 Dispatcher类提供了两种注册工作项的方法:调用 BeginInvoke 。两种方法都安排委托执行。 Invoke是一个同步调用 - 也就是说,直到UI线程实际完成执行委托才会返回。 BeginInvoke是异步的,并立即返回

来自msdn文章链接中的示例的小代码:

startStopButton.Dispatcher
               .BeginInvoke(DispatcherPriority.Normal,
                            New NextPrimeDelegate(AddressOf CheckNextNumber))