如何知道我有另一个线程与主线程分开?

时间:2009-12-08 06:45:12

标签: c# multithreading

假设我有这样的例程:

private void button1_Click(object sender, EventArgs e)
{
    Thread t = new Thread(new ThreadStart(Some_Work));
    t.Start();
}

我需要设置一个条件,以便“如果主线程中没有线程运行,则启动一个新线程”。

但是如何测试线程是否在主线程之外运行?

2 个答案:

答案 0 :(得分:2)

在.NET应用程序进入button1_Click之前,还有其他几个线程正在运行。例如,终结器线程总是处于闲置状态,我认为WinForms会为自己创建一个或两个。

您是否需要了解您创建的其他主题?如果是这样,你应该自己跟踪它们。如果不是:为什么?

编辑:您是否希望按需开始一些后台处理?您是否看到了BackgroundWorker组件,它为您管理线程,以及它们与用户界面的交互?或者使用Delegate.BeginInvokeThreadPool.QueueUserWorkItem

对线程池进行直接编程

答案 1 :(得分:1)

最简单的解决方案当然是存储对现有线程的引用,或者只是设置一个运行线程的标志。

你还应该维护那个字段(引用或标志),这样如果线程退出,它应该取消设置该字段,以便下一个“开始请求”开始一个新字段。

最简单的解决方案:

private volatile Thread _Thread;

...

if (_Thread == null)
{
    _Thread = new Thread(new ThreadStart(Some_Work));
    _Thread.Start();
}

private void Some_Work()
{
    try
    {
        // your thread code here
    }
    finally
    {
        _Thread = null;
    }
}