現在與所有的WaitOne和ManualResetEvent的東西的工作(謝謝!)我有最後一個問題,那就是從一個線程運行在A類的函數這是B類的一部分 - 再次允許我說明...調用從一個線程B類A類的函數[C#]
看看函數「DoIt(obejct param)」在類A中,這需要由類A調用(如圖所示)以及通過B類中的線程(如圖所示)...如何實現這一點?某種形式的代表會提供幫助嗎?
class A
{
private ManualResetEvent manualResetEvent;
int counter = 0;
public A()
{
manualResetEvent = new ManualResetEvent(false);
B child = new B(manualResetEvent);
if (manualResetEvent.WaitOne(1000, false))
{
... do the work I was waiting on ...
}
... do more work ...
// Call the function DoIt from within A //
DoIt(param)
}
// This is the function that needs to be called from A and thread in B
void DoIt(object param)
{
counter++;
... do something with param with is local to A ...
}
};
Class B
{
private ManualResetEvent manualResetEvent;
public B(ManualResetEvent mre)
{
manualResetEvent = mre;
Thread childThread = new Thread(new ThreadStart(Manage));
childThread.IsBackground = true;
childThread.Name = "NamedPipe Manager";
childThread.Start();
private void Manage()
{
... do some work ...
... call some functions ...
// Calling the function from Class A, obviouslly doesn't work as-is
DoIt(param);
manualResetEvent.Set();
... do more work ...
... call more functions ...
}
}
};
任何人都有關於如何以線程安全的方式完成此任務的任何建議嗎? 任何幫助將不勝感激。 謝謝,
只是通過「this」並使用parent.manualResetEvent代替它會更好嗎? – Shaitan00 2009-08-28 19:36:27
也許吧。但是如果你關心的是好的設計,那麼你應該重新評估整個事情,而不僅僅是一件小事。 – DSO 2009-08-28 23:23:23