WPF Invoke和BeginInvoke

本文详细解释了WPF中Invoke与BeginInvoke的功能及其区别,并通过实例演示了它们在同步与异步操作中的使用场景。此外还介绍了如何利用这两个方法在多线程环境中更新UI。

在WPF中Invoke和BeginInvoke和Winform中的是差不多的,只是一个用Control的一个用Dispatcher的。

而Invoke和BeginInvoke的区别嘛 就是一个是同步的一个是异步的,也就是一个需要等待一个不需要= =

就比如一个最简单区别的例子:

//这个输出123
        private void button1_Click(object sender, RoutedEventArgs e) {
            textblock.Text += "1";
            this.Dispatcher.Invoke(new InvokeDelegate(Test));
            textblock.Text += "3";
        }

        private void Test() {
            textblock.Text += "2";
        }

        private delegate void InvokeDelegate();

//这个输出132
        private void button1_Click(object sender, RoutedEventArgs e) {
            textblock.Text += "1";
            this.Dispatcher.BeginInvoke(new InvokeDelegate(Test));
            textblock.Text += "3";
        }

        private void Test() {
            textblock.Text += "2";
        }
View Code

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 += "123";
        }

        private delegate void InvokeDelegate();
View Code

或者觉得这样写比较烦的话嘛,就可以直接这样写:

private void button_Click(object sender, RoutedEventArgs e) {
            this.Dispatcher.BeginInvoke(new Action(() => { this.textblock.Text += "123"; }));
        }
View Code

 

转载于:https://www.cnblogs.com/socialdk/p/3405612.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值