前言
在开发Android或Vue前端的时候,我们可能数据产生后需要在多个页面接收,这时候可以用EventBus来实现,那么WPF开发能用EventBus吗?我没就来尝试一下!
EventBus
事件实体类
1 | using System; |
事件处理类接口
1 | namespace SchoolClient.Utils.EventBus |
EventBus
1 |
|
项目中使用
数据
1 | namespace SchoolClient.Socket |
项目中Event接收类
1 | class MyClass : IEventHandler<SocketEvent> |
只要调用1
ZEventBus.Instance.RegisterAll();
或者
1 | ZEventBus.Instance.Register<SocketEvent>(GetType()); |
这两种的任何一种方式注册后,都会收到事件
发送事件
1 | ZEventBus.Instance.PostEvent<SocketEvent>(msgEvent); |
问题
注意这个代码
1 | MethodInfo methodInfo = handler.GetMethod("HandleEvent"); |
我们可以看出上面的实现的原理是通过反射找到类里的方法,然后创建类的实例调用其中的HandleEvent
方法,所以问题就来了,我们没法用在Window对应的类上,因为该类无法在非UI线程中创建。
那么是不是可以直接保留类实例的引用,然后进行调用呢?
答案是不能
在运行时Window
的子类通过一下方式获取Type
1 | obj.GetType(); |
获取到的都是System.RuntimeType
,也无法通过强转调用其中的方法。
所以目前还未实现能在Window的子类中使用EventBus