我有一个在线程 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) 其他想法?
最佳答案
有一个事件你可能会看
System.Windows.Forms.Application.Idle
关于c# - C#中如何判断一个线程是否繁忙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9040778/