假设我有这样的例程:
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(Some_Work));
t.Start();
}
我需要设置一个条件,以便“如果主线程中没有线程运行,则启动一个新线程”。
但是如何测试线程是否在主线程之外运行?
答案 0 :(得分:2)
在.NET应用程序进入button1_Click
之前,还有其他几个线程正在运行。例如,终结器线程总是处于闲置状态,我认为WinForms会为自己创建一个或两个。
您是否需要了解您创建的其他主题?如果是这样,你应该自己跟踪它们。如果不是:为什么?
编辑:您是否希望按需开始一些后台处理?您是否看到了BackgroundWorker
组件,它为您管理线程,以及它们与用户界面的交互?或者使用Delegate.BeginInvoke
或ThreadPool.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;
}
}