静态IntPtr访问和退出匿名方法

时间:2013-05-01 16:42:45

标签: c# static out

将(全局)静态IntPtr var传递给p / invoke DLL interop调用,该调用将常规代码中的USB设备的有效句柄放入该var中。

private static IntPtr commHandle = (IntPtr)0;

当USB设备挂起或处于异常状态时,对互操作代码的调用会无休止地等待回复。为了避免应用程序挂起,我将代码放入普通方法内部的匿名方法线程(下面),尽管打开端口的调用有效,但使用返回的句柄会导致错误 - 同样的错误你会如果端口没有打开,请获取。

public IntPtr OpenPort(int deviceID)
Thread weAreAnonymous = new Thread(() => 
{
    if( 0==(int)commHandle)
    {
        var res = dllCommOpen(deviceID, out commHandle);
    } 
    if ((int)res > 0)
    {
        dllComFlush(res);
        this.IsOpen = ((int)res != 0);
    }
});

weAreAnonymous.Start();

现在我们等待一小段时间让线程打开端口。如果线程在小睡后仍然在运行,我们知道端口打开失败并且可以相应地处理... 只是,看似有效的返回句柄似乎并没有真正指向开放端口!

0 个答案:

没有答案