您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Winform多窗口或多线程传递数据的方法
前提:假设现在有两个窗口Form1和Form2,Form2是Form1的子窗口,现在需要通过Form2来改变Form1中的内容效果:方法一:使用Delegate(代理)第一步:在Form2中定义代理并声明实例第二步:在Form1中定义用来代理的函数第三步:在Form1中生成Form2的实例并将代理赋值给Form2中的代理对象第四步:在Form2中调用代理总结:当Form2调用代理对象proEvent时实际上是在调用Form1中的Eventpro函数,由于Eventpro属于Form1,所以赋值成功。方法二:使用自定义事件第一步:自定义事件第二步:在Form2中声明事件对象第三步:在Form1中定义事件回调函数第四步:创建Form2的对象实例,并将事件的回调函数添加到事件上(订阅事件)第五步:在Form2中的按钮上触发事件总结:当第五步事件被触发,事件对象Events会向所有订阅该事件的函数进行触发,而回调函数EventCallBack是Form1的成员,见第三步,所以数据传递成功。利弊分析:第一种方法的优点显而易见,代理参数是可以自定义的,如:voidEventPro(stringMessage),其缺点就是,每一个这样的跨窗口调用都需要在子窗口中定义一个代理对象,并在主窗口中赋值相应的函数。相对来说,我偏向于使用自定义事件,首先,不是所有学过winform的人都接触过这部分内容(高端大气上档次),其次,他可以实现一个函数向n个窗口传值,只要给事件添加订阅就可以了,frm.Events+=newEventHandlerMyEventArgs(EventCallBack)。(方便)。另外,看过winform下层代码的人会发现,事件处理数据的次数往往不止一次,当事件发生时,先由内部处理,再交给外部。我们可以在MyEventArgs的构造函数中先对事件进行处理,再发布出去,看起来更好。
本文标题:Winform多窗口或多线程传递数据的方法
链接地址:https://www.777doc.com/doc-2856524 .html