如何等待2:流程2和EventWaitHandle中的第一个

埃里克·厄勒(Eric Ouellet)

我想在2种不同类型上使用WaitForMultipleObjects:

  • 一个“ 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解决方案由于我忽略的原因无法在我的机器上运行。我的“已退出”事件从未发生(也许仅在“已处置”事件上发生)。
  • Slugart解决方案运行完美,在尝试回答之前我尝试过。
  • Sriram解决方案运行完美,因此我选择了它,因为我没有创建错误的EventWaitHandle,并且根据我的看法,它似乎更干净。

非常感谢!!!

斯里拉姆·萨克提维

您可以将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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何等待第一个命令完成?

如何等待第一个完成的goroutine

如何等待第一个k期货?

如果第一个代码正在执行中,该如何等待?

在Java中,如何等待所有任务,但是在出现第一个错误时停止?

如何等待随后链上的第一个到达结果?

Yii2 ListView中的第一个和最后一个项目

我如何等待2个诺言完成,再执行另一个诺言?

我如何等待2个dateChange事件并执行一个函数

ggplot2和一行中的第一个数据点

如何等待一个函数在javascript中执行

如何等待一个承诺来解决和跳过RxJS中的中间元素?

选择角度2中的第一个选项

如何仅等待第一个任务完成

如何只等待数组中的第一个线程在Ruby中完成?

如何获取角度 2 中的第一个父 scrollTop 元素?

如何从Nginx中的参数重写/删除第一个'%2F'

如何在psycopg2中创建第一个用户

如何计算每个客户包含多于2个订单的数据框中第一个订单和第二个订单之间的平均天数?

如何删除列中的第一个单词和最后一个单词?

如何选择<tr>中的第一个和最后一个<td>?

如何获取文件中的第一个和最后一个日期

如何从双向链表中删除第一个和最后一个节点?

等待组中的一个goroutine发生第一个错误时如何退出?

如何以array1的第一个元素和array2的第一个元素等方式组合2个数组形成一个新数组

c++ - 如何在c ++中打印具有第一个和第二个2类的对向量?

比较Google表格中的2个范围和不属于第一个范围的返回值

启动2个命令,等待第二个命令的结尾,然后终止第一个命令

在节点中,使用Q,使2个函数并行工作,但仅等待第一个函数履行其承诺