我们声明并在具有while(1)循环的方法中运行线程。如何避免在再次调用方法时创建并运行第二个线程? 我只想在这个方法中启动一个线程,并且每次再次调用该方法时,都不应该重新创建线程。我应该检查线程名称还是应该将线程声明为类的字段?C#避免在第二次输入方法时创建线程
任何想法如何做到这一点?
感谢, 克林斯曼
我们声明并在具有while(1)循环的方法中运行线程。如何避免在再次调用方法时创建并运行第二个线程? 我只想在这个方法中启动一个线程,并且每次再次调用该方法时,都不应该重新创建线程。我应该检查线程名称还是应该将线程声明为类的字段?C#避免在第二次输入方法时创建线程
任何想法如何做到这一点?
感谢, 克林斯曼
听起来像线程确实应该是类的一个字段 - 尽管如果可能有几个线程调用方法开始时,您必须小心地以线程安全的方式访问它。
你想第二次发生什么 - 应该阻止方法,还是立即完成,或者抛出异常?如果你不需要等待线程完成,那么你可能只需要一个标志而不是保持对线程本身的引用。 (请注意,我一直假设这是一种实例方法,并且您希望每个实例有一个额外线程。)如果不是这种情况,则必须相应地进行调整。
blimey,那很快!你刚刚完成异步谈话,并像往常一样回到业务:) –
@RussCam:这是一个长途火车回到阅读的好处:) –
@Jon:第二次应该只是一个检查,如果线程已经创建。我想用静态标志来表示已经创建的线程的想法是好的。谢谢! – Juergen
有方法返回一个单,并在单身构造启动线程。
您能否在第一次保存同步上下文时检查后续时间以查看它是否匹配,并在必要时发回给它?
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);
}
}
你试图建模的情况是什么? – jason
在你进入循环之前,普通的解决方案正在创建线程,设置一个布尔标志来表明你创建了它并且检查一个Thread类型的变量为null。 –
远没有足够的信息。如果我们必须猜测你想要做什么,我们不能给你一个很好的答案。 – Mark