我正在实施生产者/消费者问题。代码如下所示:
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 的事件列表,我能找到的最好的东西是绘画事件。我输入了完成工作的代码,它工作正常。问题是我以某种方式怀疑我是否以正确的方式做到了这一点,尽管它有效。我认为绘画不是做这项工作的正确地方,因为我正在做的不仅仅是绘画。我想知道是否有更好的方法来做到这一点。
编辑——无效事件处理程序的片段不起作用
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
}