C# 如何挂起和恢复线程

C# 如何挂起和恢复线程,c#,compact-framework,event-wait-handle,C#,Compact Framework,Event Wait Handle,我有一个典型的生产者/消费者问题,试图同步2个线程。 我想在C#Compact框架中找到Suspend()和Resume()的替代方法。他们都不是 由CF支持:(.我发现了一些基于EventWaitHandle的示例,并使用了如下内容: private EventWaitHandle ewh = new AutoResetEvent(); 但问题是AutoResetEvent也不是Compact框架的一部分。我想知道是否有其他方法可以使用EventWaitHandle解决此类生产者

我有一个典型的生产者/消费者问题,试图同步2个线程。 我想在C#Compact框架中找到Suspend()和Resume()的替代方法。他们都不是 由CF支持:(.我发现了一些基于EventWaitHandle的示例,并使用了如下内容:

      private EventWaitHandle ewh = new AutoResetEvent();
但问题是AutoResetEvent也不是Compact框架的一部分。我想知道是否有其他方法可以使用EventWaitHandle解决此类生产者/消费者问题。
我知道AutoResetEvent是从EventWaitHandle派生的。您还知道EventWaitHandle的其他哪些子类?

正如您所发现的,没有autoreset事件。但是您可以使用pinvoke来创建event和WaitForSingleObject等。 或者,如果您只想同步对对象的访问,只需将Lock与“Lock”对象一起使用即可。使用的是伪代码:

螺纹1 while(true){ 锁定(myLockObject){ 访问共享对象 } 线程。睡眠(1000) }

螺纹2 while(true){ 锁定(myLockObject){ 访问共享对象 } 线程。睡眠(1100) }

每个线程将锁定同一个对象,并且一次只有一个线程可以访问共享对象。只有当锁定对象未被另一个代码行(此处为另一个线程)锁定时,锁内的代码才会运行。您可以简单地使用它来“挂起”和恢复线程。锁定对象旨在启用对共享变量的同步访问


正如前面提到的,只需pinvoke本机CreateEvent、WaitForSingleObject、SetEvent API函数。

我必须道歉,Compact框架中确实有AutoResetEvent。
感谢Hans Passant,他建议使用Monitor类进行同步。

Monitor类是同步的瑞士军刀。google对“.net Monitor producer consumer algorithm”的大量点击,不要发明自己的。