-1

我有许多线程可以将文本附加到富文本框中。使用 Invoke(),我很容易在主 UI 线程和工作线程之间出现死锁。使用 BeginInvoke(),我得到了我不想要的异步 UI 更新。我希望文本立即出现在文本框中,而不是在我无法确定的某个后期阶段。

我该如何完成我的任务?

谢谢!

4

1 回答 1

3

如果不接触 UI 线程,就无法在 UI 线程上神奇地运行。
如果要调用Invoke,则需要使 UI 线程停止等待后台线程。

但是,您应该直接打电话BeginInvoke
BeginInvoke不小于Invoke; 唯一的区别是Invoke强制调用线程等待,直到 UI 线程有机会运行委托。

Invoke如果后台线程需要等待 UI 线程运行委托(例如,如果它返回一个值),您将调用。
在正常情况下,您应该始终调用BeginInvoke; 通常没有必要让后台线程等到 UI 线程空闲。

于 2011-05-16T03:09:44.273 回答