创意联盟

 找回密码
 注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

搜索
热搜: mysql server
查看: 1475|回复: 6

简单介绍.Net3.0 中跨线程访问控件 [复制链接]

发表于 2008-11-4 01:40:00 |显示全部楼层
简单介绍.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);
   }
   }
  }

Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

发表于 2008-11-4 12:48:12 |显示全部楼层

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|意盟 ( 闽ICP备06022703号 )

GMT+8, 2012-2-8 03:29 , Processed in 0.069037 second(s), 16 queries , Eaccelerator On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部