代码改变世界

.NET下跨线程访问Control。

2006-06-23 13:00  Colin Han  阅读(2327)  评论(1编辑  收藏  举报
在.NET中,一个Control是属于一个特定的线程的。如果要在另外一个线程中访问这个Control的Handler(其实,Control的很多属性都会访问到Control的Handler)。.NET 或 操作系统会抛出一个异常。

但是,某些时候我们必须这样使用。微软已经在.NET Framework中为我们包装好了方法,供我们使用:
public Object Control.Invoke (
Delegate method,
params Object[] args
)

Visual Basic (Declaration)

Public ReadOnly Property InvokeRequired As Boolean


Visual Basic (Usage)

Dim instance As Control Dim value As Boolean  value = instance.InvokeRequired 


public bool Control.InvokeRequired { get; }

通过InvokeRequired属性,我们可以判断特定的Control是否属于当前线程。如果该属性返回真,我们就必须使用Control.Invoke方法,将访问逻辑发送到Control所属的线程里运行。


powered by performancing firefox