2011-09-21 56 views
-2

我们声明并在具有while(1)循环的方法中运行线程。如何避免在再次调用方法时创建并运行第二个线程? 我只想在这个方法中启动一个线程,并且每次再次调用该方法时,都不应该重新创建线程。我应该检查线程名称还是应该将线程声明为类的字段?C#避免在第二次输入方法时创建线程

任何想法如何做到这一点?

感谢, 克林斯曼

+1

你试图建模的情况是什么? – jason

+1

在你进入循环之前,普通的解决方案正在创建线程,设置一个布尔标志来表明你创建了它并且检查一个Thread类型的变量为null。 –

+2

远没有足够的信息。如果我们必须猜测你想要做什么,我们不能给你一个很好的答案。 – Mark

回答

2

听起来像线程确实应该是类的一个字段 - 尽管如果可能有几个线程调用方法开始时,您必须小心地以线程安全的方式访问它。

你想第二次发生什么 - 应该阻止方法,还是立即完成,或者抛出异常?如果你不需要等待线程完成,那么你可能只需要一个标志而不是保持对线程本身的引用。 (请注意,我一直假设这是一种实例方法,并且您希望每个实例有一个额外线程。)如果不是这种情况,则必须相应地进行调整。

+1

blimey,那很快!你刚刚完成异步谈话,并像往常一样回到业务:) –

+1

@RussCam:这是一个长途火车回到阅读的好处:) –

+0

@Jon:第二次应该只是一个检查,如果线程已经创建。我想用静态标志来表示已经创建的线程的想法是好的。谢谢! – Juergen

1

有方法返回一个单,并在单身构造启动线程。

1

您能否在第一次保存同步上下文时检查后续时间以查看它是否匹配,并在必要时发回给它?

SynchronizationContext syncContext = null; 
... 

// "object state" is required to be a callback for Post 
public void HiThar(object state) { 
    if (syncContext == null) { 
    syncContext = SynchronizationContext.Current; 
    } else { 
    syncContext.Post(HiThar, state); 
    } 
} 
相关问题