asp.net3.0中进行跨线程访问的替代方法

发布时间:2019-09-08编辑:脚本学堂
asp.net3.0中进行跨线程访问的替代方法

用WPF做一个项目的UI部分,发现跨线程地访问了UI控件,自然地报异常了。
找了半天也没在控件中找到Invokerequired属性和Invoke方法。
最后发现在.net3.0中,这有所改变了。

替代InvokeRequired的方法是DispatcherObject.CheckAccess()或DispatcherObject.VerifyAccess()方法,用于指示当前线程是否可以直接访问控件。
替代Invoke的方法是DispatcherObject.Dispatcher.BeginInvoke(...)方法。

参考代码:
// Uses the DispatcherObject.CheckAccess method to determine if
// the calling thread has access to the thread the UI object is on
private void TryToUpdateButtonCheckAccess(object uiObject)
{
 Button theButton = uiObject as Button;

 if (theButton != null)
 {
 // Checking if this thread has access to the object
 if(theButton.CheckAccess())
 {
 // This thread has access so it can update the UI thread
 UpdateButtonUI(theButton);
 }
 else
 {
 // This thread does not have access to the UI thread
 // Pushing update method on the Dispatcher of the UI thread
 theButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
 new UpdateUIDelegate(UpdateButtonUI), theButton);
 }
 }
}