我正在尝试创建一个表单,在处理特定任务时将其动画化(作为委托人传递给构造函数).它工作正常,但我遇到的问题是,如果我想要执行的特定方法的返回类型为void,我无法实例化我的泛型类的副本.
我知道这是设计和所有,但我想知道是否有这样的情况已知的解决方法.
如果它有助于我的所有窗体看起来像这样(为简洁起见修剪):
public partial class operatingWindow: Form { public delegate T Operation(); private Operation m_Operation; private T m_ReturnValue; public T ValueReturned { get { return m_ReturnValue; } } public operatingWindow(Operation operation) { /*...*/ } }
我称之为:
operatingWindowprocessing = new operatingWindow (new operatingWindow .Operation(this.doStuff)); processing.ShowDialog(); // ... private int doStuff() { Thread.Sleep(3000); return 0; }
laktak.. 6
不,你需要创建一个重载来做到这一点.
例如
public operatingWindow(Action action) { m_Operation=() => { action(); return null; } }
此外,您不需要定义自己的委托,您可以使用Func
和Action.
不,你需要创建一个重载来做到这一点.
例如
public operatingWindow(Action action) { m_Operation=() => { action(); return null; } }
此外,您不需要定义自己的委托,您可以使用Func
和Action.