【发布时间】:2012-01-27 22:15:23
【问题描述】:
我有一个在线程Thread1 上运行的 Windows 窗体 UI。我有另一个线程Thread2,它通过需要更新 Windows UI 的外部事件获取大量数据。 (它实际上更新了多个 UI 线程。)
我有第三个线程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) 在 form1 中创建一个事件,通知 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]);
}
在这种情况下,我将如何编写一个通知表单空闲的事件?
和
c) 其他想法?
【问题讨论】:
标签: c# winforms multithreading