摘要: 这两天用WPF做一个项目的UI部分时, 发现跨线程地访问了UI控件, 自然地报异常了. 当时找了半天也没在控件中找到InvokeRequired属性和Invoke方法, 郁闷之极.....最后发现在.net3.0中,这有所改变了.替代InvokeRequired的方法是DispatcherObject.CheckAccess()或DispatcherObject.VerifyAccess()方法,用于指示当前线程是否可以直接访问控件.替代Invoke的方法是DispatcherObject.Dispatcher.BeginInvoke(...)方法参考代码:// Uses the Dispat 阅读全文
posted @ 2013-09-23 12:09 龙腾飞 阅读(269) 评论(0) 推荐(1) 编辑
摘要: 谈到多线程,很多人对其可能都不太有好感,觉得麻烦与易出错。所以我们不排除有这样的情况:假设我对“多线程”、“异步”这些字眼潜意识地有些反感,所以在编码过程中能不用就不用,觉得延迟几百毫秒还是可以忍受的,如果系统中这种“可以忍受”的地方很多,最后我们会发现系统的性能变得一团糟,界面总是在“卡”(阻塞)。这里我们讨论一下WPF的多线程模型,以便利用它使我们的UI线程得到解脱。1,UI线程传说WPF应用程序都至少有两个线程,一个用于UI绘制,其隐藏于后台,另一个用于管理UI,包括用响应用户输入执行后台代码等。MSDN上对这两个线程是这样描述的:“Typically, WPF applications 阅读全文
posted @ 2013-09-23 12:08 龙腾飞 阅读(439) 评论(0) 推荐(2) 编辑
摘要: 简介但凡涉及到图形界面,往往的设计都是不支持或者不推荐使用多个线程操作界面内容.而且通常会有一个专门的线程调度器来处理任务线程和界面线程的问题.下面提供两个两个方案.使用Dispatcher.BeginInvoke这个方法简单暴力适合小工作量的修改一些界面内容.使用Dispatcher.BeginInvoke()会将代码安排为调度程序的一个任务.步骤使用Thread新建并开始一个线程在新建的线程处理函数中需要修改界面的时候获取界面的dispatcher使用Dispatcher的BeginInvoke方法指定一个线程优先级,和一个委托,这个委托时用于修改界面内容的下面给出一部分代码//新建线程T 阅读全文
posted @ 2013-09-23 12:06 龙腾飞 阅读(3492) 评论(0) 推荐(2) 编辑