我有一个服务创建一个线程,该线程应该运行直到互斥体由另一个进程发送信号。我在我的服务代码以下打开一个与服务共享的互斥体
private readonly Mutex _applicationRunning = new Mutex(false, @"Global\HsteMaintenanceRunning");
protected override void OnStart(string[] args)
{
new Thread(x => StartRunningThread()).Start();
}
internal void StartRunningThread()
{
while (_applicationRunning.WaitOne(1000))
{
FileTidyUp.DeleteExpiredFile();
_applicationRunning.ReleaseMutex();
Thread.Sleep(1000);
}
}
现在我应该要求互斥锁,并迫使while循环控制台应用程序要退出
var applicationRunning = Mutex.OpenExisting(@"Global\HsteMaintenanceRunning");
if (applicationRunning.WaitOne(15000))
{
Console.Write("Stopping");
applicationRunning.ReleaseMutex();
Thread.Sleep(10000);
}
当控制台应用程序试图打开互斥我收到错误“由于被废弃的互斥体而等待完成”。这里有什么问题?
一个被遗弃互斥体意味着一个线程在释放它对互斥锁的保留之前被终止。这让我想知道你的服务的DeleteExpiredFile()方法是否抛出一个异常,并因此阻止互斥体被正确释放。 – RogerN 2013-04-29 14:54:59
在那一刻该方法除了返回0之外什么也不做。它只是一个占位符,代码可能会在我有互斥锁工作后进行。对不起,我很抱歉 – John 2013-04-29 15:01:34