C# 在我自己的课堂上包装存在事件的设计模式

C# 在我自己的课堂上包装存在事件的设计模式,c#,.net,C#,.net,全部: 这个问题来自我目前正在工作的C#项目。在解决方案中,它包括三个项目,一个是UI项目,另一个是接口项目,第三个是组件项目。我的解决方案的基本思想是UI项目可以动态加载继承接口项目中定义的接口的组件DLL。在接口项目中,我定义了两个类,一个是UI项目用来动态加载DLL的接口,这个接口定义了组件对象中的所有暴露实体。除了这个接口之外,还有一个抽象组件核心类继承了公共接口,它包含了实际组件对象中的所有公共操作。我画了一个图来描述我之前的解释 “UI类-->接口我找到了解决问题的解决方案。我可以使

全部:

这个问题来自我目前正在工作的C#项目。在解决方案中,它包括三个项目,一个是UI项目,另一个是接口项目,第三个是组件项目。我的解决方案的基本思想是UI项目可以动态加载继承接口项目中定义的接口的组件DLL。在接口项目中,我定义了两个类,一个是UI项目用来动态加载DLL的接口,这个接口定义了组件对象中的所有暴露实体。除了这个接口之外,还有一个抽象组件核心类继承了公共接口,它包含了实际组件对象中的所有公共操作。我画了一个图来描述我之前的解释


“UI类-->接口我找到了解决问题的解决方案。我可以使用add and remove关键字在我的组件核心类中定义我的事件访问器。代码如下:

event EventHandler<ProgressChangedEventArgs> ProcessChanged;
event EventHandler<RunWorkerCompletedEventArgs> RunWorkerCompleted;
mBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler ( this.ProcessChanged );
mBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler ( this.RunWorkerCompleted );

        public virtual event ProgressChangedEventHandler ProcessChanged
        {
            add
            {
                lock ( mEventLock ) { mBackgroundWorker.ProgressChanged += value; }
            }
            remove
            {
                lock ( mEventLock ) { mBackgroundWorker.ProgressChanged -= value;}
            }
        }
因此,这可以解决我的问题。分配给组件核心事件的用户可以立即将事件分配给BackgroundWorker的相关事件。这就是我想要的。因此,在我上面的问题中,两部分代码可以集成到一部分代码中