WPF 线程
来源:互联网 发布:北京大学远程网络教育 编辑:程序博客网 时间:2024/06/07 13:15
初学习WPF,记录下学习笔记
WPF更新界面与winform有相同的地方,也有不同的地方,相同的地方:
都可以使用直接赋值属性或者在其他线程上调用委托切换到主线程上更新数据,不同的地方是WPF可以使用绑定对象的方式更新界面,提供了很多灵活性,我现在要说的是相同的地方,尽管理论是相同的,但是使用起来还有有差别:
1.WPF 获取主线程调度的方法:
private void Button_Click(object sender, RoutedEventArgs e) { System.Windows.Threading.Dispatcher d1 = System.Windows.Threading.Dispatcher.CurrentDispatcher; System.Windows.Threading.Dispatcher d2 = this.Dispatcher; MessageBox.Show((d1.Equals(d2)).ToString()); }
上述的结果是“true”可以看到获取主线程的调度有两种方法,其中this表示当前的主窗体
2.其他线程的调度:我们将上面的代码稍作修改:
private void Button_Click(object sender, RoutedEventArgs e) { System.Windows.Threading.Dispatcher d1 = System.Windows.Threading.Dispatcher.CurrentDispatcher; System.Windows.Threading.Dispatcher d2=null; System.Threading.Thread t = new System.Threading.Thread(() => { DoSomething(d2); }); t.Start(); MessageBox.Show((d1.Equals(d2)).ToString()); }void DoSomething(System.Windows.Threading.Dispatcher d) { d=System.Windows.Threading.Dispatcher.CurrentDispatcher; System.Threading.Thread.Sleep(5000); }
可以看到上述代码的结果为“false”.说明两个调度是不一样的。
如果我们再加入如下代码:
private void Button_Click(object sender, RoutedEventArgs e) { System.Windows.Threading.Dispatcher d1 = System.Windows.Threading.Dispatcher.CurrentDispatcher; System.Windows.Threading.Dispatcher d2=null; System.Threading.Thread t = new System.Threading.Thread(() => { DoSomething(d2); }); t.Start(); MessageBox.Show((d1.Equals(d2)).ToString()); **d1.Invoke(() => { this.Title = "使用主线程调用"; }); d2.Invoke(() => { this.Title = "使用其他线程调用"; });**/此处会报错 }void DoSomething(System.Windows.Threading.Dispatcher d) { d=System.Windows.Threading.Dispatcher.CurrentDispatcher; System.Threading.Thread.Sleep(5000); }
在d2.Invoke(() => { this.Title = “使用其他线程调用”; })处会报错。
总结:从上面两个例子可以看出,我们经常在线程中用this.Dispatcher.Invoke(new Action(…))其实就是将线程从其他线程切换到主线程。我们也可以在主线程中的到其他线程的调度,然后在利用Invoke方法,相当于在线程中执行方法。
0 0
- WPF 线程
- WPF 线程
- WPF的线程模型
- WPF的线程模型
- WPF的线程模型
- WPF的线程模型
- WPF线程处理模型
- WPF线程处理模型
- WPF的线程模型
- WPF的线程模型
- WPF线程模型
- wpf线程模型
- wpf线程进度控制
- WPF的线程模型
- WPF线程同步
- WPF UI线程安全性
- WPF 线程 Dispatcher
- DispatcherObject与WPF线程模型
- 字符流中第一个不重复的字符
- ubuntu 软件安装
- 求多个数的最小公倍数
- 图的最短路径算法
- 【opencv练习03-Mat相关操作】
- WPF 线程
- leetcode Longgest Palindrome Substring
- HDU:1856 More is better(并查集+技巧)
- 最小生成树题集
- HDOJ 1664 Different digits
- 剑指Offer----面试题38:数字在排序数组中出现的次数
- HDOJ 5326 Work
- Educational Codeforces Round 15 Analysis of Pathes in Functional Graph rmq 变形
- [知乎有感]读书到底为了什么,读研到底值不值?