Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测线程化方法是否已完成_C#_Multithreading_Blocking - Fatal编程技术网

C# 检测线程化方法是否已完成

C# 检测线程化方法是否已完成,c#,multithreading,blocking,C#,Multithreading,Blocking,我有一个队列,基本上是albahari.com中的生产者/消费者队列 线程书,它从队列中取出一个队列项,该队列项是从队列中取出的一个操作执行块,然后调用一个方法来执行队列项中的actionlist 我可以通过使用一个thread.sleep()执行spin/wait操作来终止一个null actionblock并阻塞主线程,直到队列计数变为零,所有线程都会在此期间停止=空循环,从而完成,但执行最后一个actionlist的方法可能仍在执行最后一个线程 问题是,他们是否无论如何都要检测该方法是否仍

我有一个队列,基本上是albahari.com中的生产者/消费者队列 线程书,它从队列中取出一个队列项,该队列项是从队列中取出的一个操作执行块,然后调用一个方法来执行队列项中的actionlist

我可以通过使用一个thread.sleep()执行spin/wait操作来终止一个null actionblock并阻塞主线程,直到队列计数变为零,所有线程都会在此期间停止=空循环,从而完成,但执行最后一个actionlist的方法可能仍在执行最后一个线程

问题是,他们是否无论如何都要检测该方法是否仍然有一个线程在执行它,比如可能使用一个信号量或带有联锁的计数器在方法开始时向上计数信号量,在方法结束时向下计数信号量。所以如果它达到零,我知道它没有线程


这是在接口上实现销毁方法的方法,在调用dispose之前将其关闭。

使用具有已完成事件的Backgroundworker

如果启动这样的线程,请使用具有已完成事件的Backgroundworker

System.Threading.Thread mythread = new System.Threading.Thread();
mythread.Start();
您可以检查:

mythread.IsAlive()

在任意点确定其状态。

如果启动以下线程:

System.Threading.Thread mythread = new System.Threading.Thread();
mythread.Start();
您可以检查:

mythread.IsAlive()

可以随时确定其状态。

在方法上使用PostSharp属性。

在方法上使用PostSharp属性。

很久很久以前就不赞成轮询状态,请使用事件。很久很久以前就不赞成轮询状态,请使用事件。我使用的是System.Threading.Thread模型,IsAlive属性是测试的理想选择,它可以正常工作。感谢您的快速响应。这是我使用的System.Threading.Thread模型,IsAlive属性是测试的理想选择,它可以正常工作。谢谢你的快速回复。