我正在實施生產者/消費者問題。代碼如下所示:如何檢測失效的控件?
void producer()
{
// produce item
// update some control in form
}
void consumer()
{
// consume item
// update some control in form
}
生產者和消費者的方法是在從創建我的形式一個不同的線程中執行,所以我不能在形式上更新的控制。我試過下面的代碼:
void producer()
{
// produce item
// put the work to be done in a queue
this.Invalidate();
}
void consumer()
{
// consume item
// put the work to be done in a queue
this.Invalidate();
}
所以現在我必須檢測表單是否已經失效。我查看了Form的事件列表,我能找到的最好的事情就是繪畫事件。我把代碼完成了工作,並且工作正常。問題是我懷疑我已經做到了正確的方式,儘管它有效。我認爲油漆不適合做這項工作,因爲我所做的不僅僅是繪畫。我想知道是否有更好的方法來做到這一點。
編輯 - 爲片段Invalidated事件處理程序不工作
public Form1()
{
InitializeComponent();
this.Invalidated += InvalidateEventHandler;
}
void producer(object o)
{
// produce
// put work in queue
this.Invalidate();
}
public void InvalidateEventHandler(object sender, InvalidateEventArgs e)
{
// Do Stuff to form -- Where exception raises
}
也許我不明白但是如何解決我的執行線程不是創建者的問題?您能否解釋一下? – atoMerz 2011-05-14 10:28:11
Invoke是爲了解決這個問題而創建的。 – 2011-05-14 10:30:25
謝謝,它工作正常。 – atoMerz 2011-05-14 10:39:10