解决方案中根据代码功能划分项目,一般会把UI界面的Form 等等放到一个项目下,逻辑代码放到另外一个项目。如在逻辑代码项目创建UI项目里的某个弹框实例,会遇到一些线程相关的问题。这时候可以用到delegate。
以下简要描述常见的使用方法。
假如要求功能:
1.UI项目里存在名为Example的窗体,用于报警的弹框,如没有先添加。
2.代码运行满足某条件,需要在逻辑项目线程里弹框,阻塞处理当前报警,处理的结果是true或者false。
代码要求
1.在逻辑代码类操作,例如
1) public delegate bool DelegateUseExampleForm();//因为需要返回结果,使用bool;
2)使用 DelegateUseExampleForm当类型使用,定义UseExampleForm,赋值null;
public DelegateUseExampleForm UseExampleForm = null;
2.实现关联
1)前提是在UI主窗体使用方法实现创建实例Example创建和结果输出,例如:
private bool ShowExampleForm()
{
Example UseExample= new Example();
UseExample.ShowDialog();//阻塞
return UseExample.DialogResult == DialogResult.Yes; //返回结果
}
2)在UI主窗体Load事件函数内,实现关联
CurrentWorkFlow.UseExampleForm= ShowExampleForm;//假设CurrentWorkFlow是逻辑代码类的单例。
使用,假设在逻辑代码内满足条件后,弹框处理返回flase,类似如下:
if (!CurrentWorkFlow.UseExampleForm.Invoke())
{
//如果返回的结果是false
}