作者deuter (Harold)
看板C_Sharp
标题Re: [问题] delegate.BeginInvoke跟control.invoke …
时间Thu Nov 22 12:14:49 2007
BeginInvoke 请参考 .NET Asynchronous Programming Design Patterns
http://msdn2.microsoft.com/EN-US/library/ms228969.aspx
基本上 Delegate.BeginInvoke 和 Control.BeginInvoke 都是 async call
Delegate.BeginInvoke 可以用在任何地方, .NET 会从 ThreadPool 中找
一个 thread 去执行你的 function
Control.BeginInvoke 专门用在 Windows Forms, 因为 Windows Forms 的特性,
control 的 method 不能在任何一个 thread 上执行, 一定要在原来建立 Control
的 thread 上执行
※ 引述《reptile0426 ( )》之铭言:
: 首先先感谢toki大的解说,他讲的是control.BeginInvoke的观念
: 後来我自己又看了一下两者的差别
: 当你的其他thread (不是UI thread)要对UI thread的控制项做改变
: 就必须呼叫control.BeginInvoke来做
: 而delegate.BeginInvoke在我的理解看来
: 当你为了做某件事且同时显示某些状态在视窗上,
: 若你用ui thread来做,那麽运算的过程式不能同时显示的,因为他还在算东西
: 必须等到运算完,才能做出显示,这样失去我们原本设计这视窗程式意义
: 所以用delegate.BeginInvoke来呼叫要运算的function
: 呼叫後他会开一个thread来做这件事,所以ui thread不会被占用
: 这样就可以更新UI画面了
: 而上一篇MSDN的例子,他是先呼叫了delegate.BeginInvoke来处理运算
: 运算过程中 运算进度会不断增加 并且想把进度显示在progressbar上
: 而这更新progressbar并显示就是UI thread要做的,
: 而进度只有运算的那个function知道自己算到哪了 他在另一个thread上
: 这时就接到toki大讲的了
: 我想大概就是这样吧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 67.161.17.127