您可以使用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();
}
}
另外,我建議你(如果你能)使用異步庫(它是可作爲獨立設置使用)。正如你看到你只是等待,而其他的代碼獲得沒有任何UI鎖定和事件執行
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();
}
}
:在那裏,你可以更直接的方式實現它。 如果需要的話,我可以提供關於異步/等待如何工作的更深入的解釋。
當你說Windows窗體時你是什麼意思?你通過asp.net標記問題,所以我相信這是一個網頁,你想抓住一些用戶輸入? – sll