У меня в потоке работает пользовательский интерфейс Windows Forms, Thread1
. У меня есть другой поток, Thread2
, который получает тонны данных через внешние события, которые необходимо обновить пользовательский интерфейс Windows. (Это фактически обновляет несколько потоков пользовательского интерфейса.)
У меня есть третий поток, Thread3
, который я использую в качестве потока буфера между Thread1
и Thread2
, чтобы Thread2
мог продолжать обновлять другие потоки (тем же методом).
Мой буферный поток, Thread3
, выглядит так:
public class ThreadBuffer
{
public ThreadBuffer(frmUI form, CustomArgs e)
{
form.Invoke((MethodInvoker)delegate { form.UpdateUI(e); });
}
}
Я бы хотел, чтобы мой ThreadBuffer
проверил, занята ли моя форма предыдущими обновлениями. Если это так, я бы хотел, чтобы он дождался освобождения и затем вызвал UpdateUI(e)
.
Я думал о любом из них:
а) * * тысяча двадцать-одна
//PseudoCode
while(form==busy)
{
// Do nothing;
}
form.Invoke((MethodInvoker)delegate { form.UpdateUI(e); });
Как мне проверить form==busy
? Кроме того, я не уверен, что это хороший подход.
b) Создайте событие в форме 1, которое уведомит ThreadBuffer
, что оно готово к обработке.
// psuedocode
List<CustomArgs> elist = new List<CustomArgs>();
public ThreadBuffer(frmUI form, CustomArgs e)
{
from.OnFreedUp += from_OnFreedUp();
elist.Add(e);
}
private form_OnFreedUp()
{
if (elist.count == 0)
return;
form.Invoke((MethodInvoker)delegate { form.UpdateUI(elist[0]); });
elist.Remove(elist[0]);
}
В таком случае, как мне написать событие, которое сообщит, что форма свободна?
и
в) другие идеи?