我怀疑......
我想创建一个函数,它看起来像这样......
public class A //this is just a class file
{
function dowork()
{
//work 1
INPUT = here in this line it should call a delegate function or raise event etc...
//work 2 using INPUT
}
}
public class B
{
function myfn()
{
A objA = new A();
objA.dowork();
}
}
在“A级”中我们会提出大约一个事件&它会向用户显示一个窗口表单,然后用户将输入一些值&我们需要将该值返回给A类 - > dowork方法....然后我们才应该继续“工作2”
这也应该支持多线程......任何人都知道我们如何实现这个?
谢谢:)
答案 0 :(得分:0)
您可以使用ManulResetEvent来实现此目的:运行输入表单并在完成该表单时设置事件,以便您可以从A.dowork方法中捕获它。在输入操作中,您运行无限循环,检查事件状态和处理应用程序事件,以便在此时让应用程序负责:
public class A //this is just a class file
{
private ManualResetEvent _event;
public void dowork()
{
//work 1
_event = new ManualResetEvent(false);
//INPUT = here in this ...
Worker worker = new Worker();
worker.DoInput(_event);
while(true)
{
if(_event.WaitOne())
break;
Application.DoEvents();
}
//work 2 using INPUT
}
}
class Worker
{
private ManualResetEvent _event;
public void DoInput(ManualResetEvent @event)
{
_event = @event;
// Show input form here.
// When it done, you call: _event.Set();
}
}
另外,我建议你(如果可以的话)使用Async库(它可以作为独立的设置使用)。在那里,您可以更直接的方式实现它:
public class A //this is just a class file
{
public async void dowork()
{
//work 1
//INPUT = here in this ...
Worker worker = new Worker();
wait worker.DoInput();
//work 2 using INPUT
}
}
class Worker
{
public async void DoInput()
{
InputForm form = new InputForm();
wait form.ShowInput();
}
}
public class B
{
async void myfn()
{
A objA = new A();
wait objA.dowork();
}
}
如您所见,只是等待其他代码段执行而没有任何UI锁定和事件。 如果需要,我可以提供有关异步/等待如何工作的更深入的解释。