如何在一个地方暂停多个线程,然后让一个线程做一些事情? C#(Zennoposter)

时间:2018-07-20 06:28:16

标签: c# multithreading synchronization thread-safety autoresetevent

我是线程和类似事物的新手。我知道如何使用锁构造,但没有其他东西。但是现在该到了。

我在Zennoposter上有一个带有多个线程的程序。我使用C#在此处编写代码。一切正常,但现在我遇到了问题。我需要通过一个线程在程序中的某些位置执行一段代码(我必须运行一个应用程序并初始化project.Tables)。我尝试了两种方法:

  1. 我暂停了除代码段之前的最后一个线程之外的所有线程,最后一个线程执行了代码。但这对我没有用。我列出了线程列表,检查了它们的状态,如果状态不是Suspended,则将其挂起。但是我没有让最后一个线程正常工作,而是阻止了所有线程...
  2. 我使用了静态AutoResetEvent(static AutoResetEvent waitHandler = new AutoResetEvent(true);)。然后,在代码中放置“执行一个线程”之前,我不得不暂停所有使用waitHandler.WaitOne();的线程,以使每个线程都在等待。在此代码之后,我使用waitHandler.Set();来允许其他线程使用waitHandler。但这与锁构造具有相同的作用:(

问题是,如果某个线程到达必须停止的位置,并且其他任何线程之前仍在执行代码,则它必须等待任何其他线程并且不执行“一个线程执行”代码。 因此,如果有人知道如何解决该问题,请帮助我。我坚持了一个星期。

1 个答案:

答案 0 :(得分:0)

您需要锁定 样本:

lock(SyncObject) {

//here your code only for 1 thread, others threads waite

}