c# - C#中如何判断一个线程是否繁忙?

标签 c# winforms multithreading

我有一个在线程 Thread1 上运行的 Windows 窗体 UI。我有另一个线程 Thread2,它通过需要更新 Windows UI 的外部事件获取大量数据。 (它实际上更新了多个 UI 线程。)

我有第三个线程,Thread3,我将它用作 Thread1Thread2 之间的缓冲线程,以便 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/

相关文章:

c# - "volatile"关键字是做什么用的?

c# - 如何在 C#.Net 中移动表单?

java - 为什么线程是顺序执行的?

Java JFrame 在运行线程时卡住

c# - BeginInvoke 和 Thread.Start 之间的区别

c# - 使用 C# 重建更新的 VB6 COM 类替换

c# - 包含路径表达式必须引用定义的导航属性

c# - Entity Framework 代码优先与 DbUp

c# - 从资源文件读取 Cursor 时抛出 ArgumentException

c# - 如何确定哪个属性是数据绑定(bind)的默认属性?