gpt4 book ai didi

c# - 如何等待第 2 个 : a process and an EventWaitHandle

转载 作者:太空狗 更新时间:2023-10-30 00:18:57 26 4
gpt4 key购买 nike

我想在 2 种不同类型上等待多个对象:

  • 一个“EventWaitHandle”
  • 一个'Process.Handle' ==> intptr

我不知道如何(以适当的方式)将“process.Handle”转换为 WaitHandle 以使以下代码正常工作:

   var waitHandles = new WaitHandle[2];
waitHandles[0] = waitHandleExit;
// Next line is the offending one:
waitHandles[1] = new SafeWaitHandle(process.Handle, false);
int waitResult = WaitHandle.WaitAny(waitHandles, timeOut);

我收到错误:

Error   1   Cannot implicitly convert type 'Microsoft.Win32.SafeHandles.SafeWaitHandle' to 'System.Threading.WaitHandle' ...

有人知道等待进程和 EventWaitHandle 的正确方法吗?

更新...我选择答案的原因。

首先感谢所有人:Jaroen、Slugart 和 Sriram。所有答案都非常好。

  • 由于我忽略的原因,Jaroen 解决方案在我的机器上不起作用。我的“退出”事件从未发生过(也许只发生在 Disposed 上?)。
  • Slugart 解决方案非常有效,我在修改它的答案之前尝试了它。
  • Sriram 解决方案运行完美,我选择它是因为我没有创建错误的 EventWaitHandle,而且根据我的设想似乎更干净。

非常感谢!!!

最佳答案

你可以 subclass the WaitHandle代表 Process.Handle 并使用 WaitHandle 的实例等待。

public class ProcessWaitHandle : WaitHandle
{
private readonly Process process;
public ProcessWaitHandle(Process process)
{
this.process = process;
this.SafeWaitHandle = new SafeWaitHandle(process.Handle, false);
}
}

var waitHandles = new WaitHandle[2]
{
waitHandleExit,
new ProcessWaitHandle(process)
};
int waitResult = WaitHandle.WaitAny(waitHandles, timeOut);

关于c# - 如何等待第 2 个 : a process and an EventWaitHandle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26852305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com