我有一个流程HANDLE
我从P/Invoke
的d API获得。与任务搭配很好的WaitForSingleObject
或WaitOne
的道德等值是什么?我该如何等待HANDLE/SafeHandle?
回答
我会包起来的WaitHandle的,就像这样:
private class MyWaitHandle : System.Threading.WaitHandle {
public MyWaitHandle(IntPtr handle) {
this.SafeWaitHandle = new Microsoft.Win32.SafeHandles.SafeWaitHandle(handle, true /*change to false if you will manually close your handle*/);
}
}
然后通过你的P /调用句柄到新MyWaitHandle
和常伺候它:
using (var myWaitThing = new MyWaitHandle(hSomeUnmanagedHandle)) {
myWaitThing.WaitOne();
}
不知道是什么在玩任务时你需要寻找一些细节,但是如果你想在等待事件完成时完成一项任务,那么就会发起一个Task
,该任务只是等待WaitOne()返回,然后你可以等待那Task
就好 任何其他。
Stephen Cleary的AsyncEx库中有['WaitHandleAsyncFactory.FromWaitHandle'](https://github.com/StephenCleary/AsyncEx/blob/master/src/Nito.AsyncEx.Interop.WaitHandles/Interop/WaitHandleAsyncFactory.cs)。 –
虽然这仍然阻塞,所以它在功能上与现有的WaitForSingleObject调用相同:(如果可能,我不想使用任务线程 –
通过阻塞线程直到完成为止,Windows等待句柄在后端工作如果你正在等待一个线程,那么你在某个地方阻塞了一个线程,你可以使用一个专用线程,一个来自线程池的工作线程等,但是某个线程在等待的时候被占用。认为不使用线程会使用定时器来定时回调工作线程,以轮询等待句柄来完成,然后使用它来发信号完成任务 - 但这不是非常高效...... – Tim
- 1. 我该如何等待拉力?
- 2. 我该如何等待Angular4 HttpClient响应?
- 3. 我该如何等待回调?
- 4. 我该如何等待TTimer完成?
- 5. 我该如何等待Parallel.ForEach完成
- 6. 我该如何等待JavaScript的结果?
- 7. 我该如何等待ABPeoplePickerNavigationController被解雇
- 8. 我应该等待AutoView吗?
- 9. Java:我如何等待updateUI?
- 10. 我无法等待等待?
- 11. 在Perl中,我该如何等待线程并行结束?
- 12. 我应该如何等待文档加载?
- 13. 我该如何测试无限等待的听众?
- 14. 我该如何等待价值改变使用JavaScript的HTML
- 15. 我该如何等待Angularfire 2中的观察值?
- 16. 我应该如何等待Python 2和Python 3中的按键?
- 17. Java:我应该如何实现等待,以便图像呈现?
- 18. 我该如何等待看到arduino闪烁多少次?
- 19. 我该如何等待完成另一课的asynctask?
- 20. 我该如何等待在javascript中执行事件
- 21. 我该如何等待初始化组件被执行
- 22. 使用Boost的ASIO,我该如何等待Windows事件?
- 23. 我该如何等待LOVE2D中的条件?
- 24. SDL_RenderPresent()不等待vsync - 如何等待?
- 25. 为什么我应该更喜欢单个'等待Task.WhenAll'多个等待?
- 26. 如何等待ThreadState.Abort?
- 27. Java。如何等待?
- 28. 如何等待File.Exists?
- 29. 如何等待$ .getJSON()?
- 30. 硒 - 如何等待?
RegisterWaitForSingleObject也许。通过不隐藏关于句柄和api类型的细节来获得更好的答案,这是毫无意义的。 –
@HansPassant这是来自CreateProcess的进程句柄。 –