【发布时间】:2014-06-09 11:33:13
【问题描述】:
当调用 EventWaitHandle.WaitOne 时,我需要更改当前代码以不阻塞当前线程。问题是我正在等待系统范围的事件。我还没有找到合适的替代品。
代码:
EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.AutoReset, "Local event", out screenLoadedSignalMutexWasCreated);
StartOtherApp();
if (screenLoadedSignalMutexWasCreated)
{
isOtherAppFullyLoaded = handle.WaitOne(45000, true);
if (isOtherAppFullyLoaded )
{
// do stuff
}
else
{
// do stuff
}
handle.Dispose();
signalingCompleted = true;
}
else
{
isOtherAppFullyLoaded = false;
throw new Exception(" ");
}
我需要应用程序继续运行,而不是在我调用 WaitOne 的线路上停止,理想情况下会有等待。我该如何实现呢?
【问题讨论】:
-
那么,如果您不想等待,为什么要首先调用 WaitOne?我不明白你想要发生什么。
-
我删除了我的答案,因为你需要一个我忽略的系统范围的实现
-
您在寻找什么行为?您是否希望您的应用程序继续执行,并在另一个应用程序完全加载(或 45 秒过去)时收到通知?
-
查看ThreadPool.RegisterWaitForSingleObject,它有一个工作示例。您传递的
waitObject可以是系统范围的对象(例如,全局EventWaitHandle)。 -
这是我需要重写的原始代码。当我们在 app1 结束时拥有它时很好,但是我们移动了该代码以更快地启动,因为第二个应用程序加载时间太长。那么等待句柄的阻塞是个问题
标签: c# multithreading asynchronous