WPF委托的运用,多线程 自定义事件

本文介绍了WPF开发中委托的两种主要应用场景:线程间访问和自定义事件。详细解释了如何利用Dispatcher进行跨线程操作,并展示了自定义事件的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在几个WPF桌面应用系统开发中经常会用到委托,在这里稍微总结一下。

主要应用:

         1.线程间的访问         

         2.自定义事件

线程间的访问:

    在多线程编程中,我们经常会需要在子线程中访问主线程的内容,特别是更改主窗体的UI界面内容,如果直接访问跨线程资源,系统就会报线程访问错误.

         WinForm中窗体类提供了Invoke方法以从子线程中访问主线程资源.

         WPFWindow类并没有Invoke方法,但是WPF提供了专门负责线程调度工作的Window.Dispatcher,每个线程都有一个,我们在一个线程中要让另一个线程做事情,其实就是调用目标Dispatcher调度完成.

         WPF中使用委托访问主线程的代码如下:        

        private delegate void DelegateShowMessage(string msg);                //

        private void ShowMessageInvoke(string msg)                                      //访

        {

            DelegateShowMessage d = ShowMessage;

            this.Dispatcher.Invoke(d);

        }

        private void ShowMessage(string msg)                                                 //线

        {

            txtMsg.Text = msg;

        }   

     这样,在子线程中直接调用ShowMessageInvoke方法就可以了.

         上面代码中的this.Dispatcher就是主线程的线程调度员.我们在自定义一个WPF控件的时候,也可以使用这一方法. Dispatcher除了使用Invoke方法调用委托之外,还可以使用BeginInvoke方法,区别在于BeginInvoke是异步执行的.

         另外,在没有Dispatcher属性的类中也可以使用Application.Current.Dispacther,它与this.Dispatcher是一样的.

 

自定义事件:

         自定义事件代码如下:

         public delegate void OnHaveReceDataDelegate(int length);                        //定义委托

         public event OnHaveReceDataDelegate OnHaveReceData;                                          //定义事件

         触发事件:

         if (OnHaveReceData != null)

         {

                  OnHaveReceData(100);

         }

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值