奇怪!为什么mscomm32.ocx在c#中不能用?&& 串口通讯中ReadFile()不能终止 http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以前我也碰到过,后来干脆装了个VB6,用它带的MSCOMM32就可以用了。 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 ); 从数据库读取两个datetime日期后,怎样按间隔月份平分? C#socket文件传送中IP问题 将Connection放进线程池的问题 用C#如何批量选择上传图片. 自定义用户控件的重载问题(详见问题) 调用非本机IIS上布署的WCF服务 请教一个鼠标事件 如何使DataGrid新增行不自动删除? 关于treeview的问题(WEB版) 关于文件产生的小问题 想学C#,不知工资,功能,开发方面怎么样?与java相比又怎么样?我现在用的是Delphi 请教。简单问题~~~~~~~解决立刻结贴~~~~~~~
如果在调用平台 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 );