C#异步操作样本1
2010-08-24 13:53
471 查看
Sample C code calling it:
This is how I approached it in C#:
OVERLAPPED overlapped; overlapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); fns.NotifyStateChange(&overlapped); WaitForSingleObject(overlapped.hEvent, INFINITE); // ...query for the new state or whatever...
This is how I approached it in C#:
[DllImport("myfuncs.dll")] unsafe public static extern int NotifyStateChange(NativeOverlapped* lpOverlapped); static private ManualResetEvent m_stateChangeEvent = new ManualResetEvent(false); public static DeviceState WaitForStateChange() { unsafe { Overlapped overlapped = new Overlapped(0, 0, m_stateChangeEvent.SafeWaitHandle.DangerousGetHandle(), null); IOCompletionCallback callback = StateChangeCallback; byte[] userData = new byte[100]; NativeOverlapped* nativeOverlapped = overlapped.Pack(callback, userData); NotifyStateChange(nativeOverlapped); m_stateChangeEvent.WaitOne(); Overlapped.Unpack(nativeOverlapped); Overlapped.Free(nativeOverlapped); } return GetCurrentState(); } [ComVisibleAttribute(true)] unsafe static public void StateChangeCallback ( uint errorCode, uint bytesTransferred, NativeOverlapped* overlapped) { m_stateChangeEvent.Set(); }
相关文章推荐
- C#异步操作样本1
- C# 文件异步操作
- C#执行异步操作的几种方式比较和总结
- 异步操作样本
- SOCKET Communication writen in C# (7) Socket 高性能异步操作 模式
- 异步操作样本
- C# BackgroundWorker实现WinForm异步操作的例子
- [C#] 走进异步编程的世界 - 在 GUI 中执行异步操作
- [转]C# 线程知识--使用Task执行异步操作
- C#执行异步操作的几种方式比较和总结
- C# 线程知识--使用Task执行异步操作
- CLR_via_C#.3rd 翻译[25.7 使用专用线程执行异步的计算限制操作]
- C#执行异步操作的几种方式比较和总结
- C# 多线程与异步操作实现的探讨
- C#使用SocketAsyncEventArgs操作套接字的简单异步通讯
- C#(2005)异步委托操作
- C#源码学习之---事件驱动异步文件操作
- C# 异步操作 async await 的用法
- 【C#进阶系列】26 计算限制的异步操作
- C#客户端的异步操作