處理我有2類:暫停事件與C#
public class A
{
private const int MAXCOUNTER = 100500;
private Thread m_thrd;
public event Action<string> ItemStarted;
public event Action<string> ItemFinished;
private void OnItemStarted(string name)
{
if (ItemStarted != null) ItemStarted(name);
}
private void OnItemFinished(string name)
{
if (ItemFinished != null) ItemFinished(name);
}
public A()
{
m_thrd = new Thread(this.Run);
m_thrd.Start();
}
private void Run()
{
for (int i = 0; i < MAXCOUNTER; i++)
{
OnItemStarted(i.ToString());
// some long term operations
OnItemFinished(i.ToString());
}
}
}
public class B
{
private Thread m_thrd;
private Queue<string> m_data;
public B()
{
m_thrd = new Thread(this.ProcessData);
m_thrd.Start();
}
public void ItemStartedHandler(string str)
{
m_data.Enqueue(str);
}
public void ItemFinishedHandler(string str)
{
if (m_data.Dequeue() != str)
throw new Exception("dequeued element is not the same as finish one!");
}
private void ProcessData()
{
lock (m_data)
{
while (m_data.Count != 0)
{
var item = m_data.Peek();
//make some long term operations on the item
}
}
}
}
我們也有其他地方在代碼
A a = new A();
B b = new B();
a.ItemStarted += b.ItemStartedHandler;
a.ItemFinished += b.ItemFinishedHandler;
- 所以,如果
ItemFinished
升高而ProcessData()
仍在工作,會出現什麼發生? - 我是否應該使用類似
AutoResetEvent
的類A
等級B
完成ProcessData
? - 是否需要在
ProcessData
中使用lock
? - 可以調用
B
類的線程與m_thrd = new Thread(this.ProcessData);
嗎?在這裏讓我感到困惑 - 在ItemStarted
事件發生之前不會完成ProcessData
(當B
中的線程已經在第一次生成ItemStarted
時已經完成),是不是會導致這種情況?
感謝您的回覆。但我必須在這裏明確地使用線程。 –
這確實使用線程。事件循環調度程序每個使用單個線程進行計劃。 – Enigmativity