Я реализую проблему производителя/потребителя. код выглядит так:
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
}