WPF Invoke与BeginInvoke的区别
2024-09-28 21:29:08
- Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。
- Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。
就是一个是同步的一个是异步的,也就是一个需要等待一个不需要等待
//这个输出123
private void button1_Click(object sender, RoutedEventArgs e) {
textblock.Text += "";
this.Dispatcher.Invoke(new InvokeDelegate(Test));
textblock.Text += "";
} private void Test() {
textblock.Text += "";
} private delegate void InvokeDelegate(); //这个输出132
private void button1_Click(object sender, RoutedEventArgs e) {
textblock.Text += "";
this.Dispatcher.BeginInvoke(new InvokeDelegate(Test));
textblock.Text += "";
} private void Test() {
textblock.Text += "";
}
Invoke是线程中比较重要的一个东西,在多线程的编程中,平常在更新界面的时候,可以用UI线程去做来减轻工作线程的负担。比如下面这样放在线程中:
private void button1_Click(object sender, RoutedEventArgs e) {
Thread invokeThread = new Thread(new ThreadStart(Method));
invokeThread.Start();
//...运算代码
} private void Method(){
this.Dispatcher.BeginInvoke(new InvokeDelegate(Test));
} private void Test() {
textblock.Text += "";
} private delegate void InvokeDelegate();
简单写法如下:
private void button_Click(object sender, RoutedEventArgs e) {
this.Dispatcher.BeginInvoke(new Action(() => { this.textblock.Text += ""; }));
}
最新文章
- Atitit 会话层和表示层的异同
- SQL语法
- IOS--UIAlertView造成屏幕闪烁
- android键盘弹出头部上移处理
- css巧妙实现分隔线
- DEELX 正则表达式引擎(v1.2)
- SQL基础(1)-创建及修改表
- The Economist
- 部分android手机CCEditBox输入之后键盘输入框不消失得问题
- Hadoop MapReduce概念学习系列之mr程序组件全貌(二十)
- DUIEngine使用Visual Studio 2010编译Debug_Dll版有关Error MSB3073错误解决方案
- An update on OS X Code Signing(OS X代码签名)
- Ganglia 入门介绍及解决fsockopen error: Connection refused问题
- react+mobx 编写 Async装饰器
- oracle 操作,偶尔记一下
- WEB入门.八 背景特效
- 【bzoj4011】[HNOI2015]落忆枫音 容斥原理+拓扑排序+dp
- JavaFX 之自定义窗口标题栏(二)
- 众数问题(山东理工OJ)
- Oracle的REGEXP_INSTR函数简单使用方法