【发布时间】:2010-04-19 12:33:48
【问题描述】:
我看过C#版本如下:
Application.Current.Dispatcher.Invoke(
DispatcherPriority.Background,
new Action(delegate { }));
但是我不知道如何将空委托放入 VB.NET,因为 VB.NET 似乎不支持匿名方法。想法?
编辑:可能是这个?
Application.Current.Dispatcher.Invoke(
DispatcherPriority.Background,
New Action(Sub()
End Sub))
【问题讨论】:
-
DoEvents?我相信他们曾经在 VB6 中使用过 DoEvents,然后人们才意识到应用程序可以拥有的不仅仅是 UI 线程。
-
现代约定是使用 Thread.Sleep(1) 或类似的,但是当您需要临时跳出线程以允许 UI 更新自身并保留在WPF 中处理循环的中间。
-
@SLC:如果您在另一个线程中进行处理,那么您不需要告诉 UI 进行自我更新(以一般刷新的方式)。
-
您必须中断 UI 线程以通知它更新进度条,这在使用 Invoke 方法的 Windows 窗体中是可能的,但我相信它在 WPF 中有所不同,这就是使用此方法的原因。 . 但老实说,我对 WPF 一无所知,只是将 C# 转换为 VB。
-
我的应用程序中有一个地方。问题是 Thread.Sleep(1) 和 Thread.Join() 也阻塞了 Dispatcher 队列。在我的应用程序中,我有一个完成大量工作的第二个线程。在 Application-Exit 事件期间,我关闭了该线程并等待它完成。但是,由于该线程还涉及一些 UI 对象,因此 Dispatcher 队列必须保持活动状态。因此,需要 DoEvents。