http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx

解决方案 »

  1.   

    以前我也碰到过,后来干脆装了个VB6,用它带的MSCOMM32就可以用了。
      

  2.   

    2、我在程序中添加了一个进程调用ReadFile()函数来侦听串口,但是当ReadFile()在侦听的时候,我想关闭这个调用ReadFile()函数的进程,这时就程序就死掉了。不知道大家有没有遇到这个问题,怎么解决呢??
    如果在调用平台 invoke 后的任何位置都未引用托管对象,则垃圾回收器可能将完 
    成该托管对象。这将释放资源并使句柄无效,从而导致平台invoke 调用失败。用 
    HandleRef 包装句柄可保证在平台 invoke 调用完成前,不对托管对象进行垃圾回收。 
    例如下面: 
    FileStream fs = new FileStream(a.txt, FileMode.Open ); 
    StringBuilder buffer = new StringBuilder( 5 ); 
    int read = 0; 
    ReadFile(fs.Handle, buffer, 5, out read, 0 ); //调用Win API中的 
    ReadFile函数 
    由于fs是托管对象,所以有可能在平台调用还未完成时候被垃圾回收站回收。将文件 
    流的句柄用HandleRef包装后,就能避免被垃圾站回收: 
    [ DllImport( Kernel32.dll; )] 
    public static extern bool ReadFile( 
    HandleRef hndRef, 
    StringBuilder buffer, 
    int numberOfBytesToRead, 
    out int numberOfBytesRead, 
    ref Overlapped flag ); 
    ...... 
    ...... 
    FileStream fs = new FileStream( "HandleRef.txt", FileMode.Open ); 
    HandleRef hr = new HandleRef( fs, fs.Handle ); 
    StringBuilder buffer = new StringBuilder( 5 ); 
    int read = 0; 
    // platform invoke will hold reference to HandleRef until call ends 
    ReadFile( hr, buffer, 5, out read, 0 );