Tag: beginread

停止Stream.BeginRead()

我需要从我的虚拟COM端口读取数据并检测消息“Dreq”。 按下连接按钮后,它连接到我的COM8端口并开始读取新线程。 我还有一个断开按钮,我希望关闭读取并断开与COM8端口的连接。 但是,我在关闭BeginRead时遇到问题。 public partial class Form1 : Form { SerialPort sp; Stream stream; IAsyncResult recv_result; private void button1_Click(object sender, EventArgs e) { sp = new SerialPort(“COM8”, 9600); sp.Open(); sp.ReadTimeout = 50000; sp.NewLine = “\n\r\0”; stream = sp.BaseStream; recv_result = stream.BeginRead(new byte[1], 0, 0, new AsyncCallback(ReadCallBack), stream); } private void ReadCallBack(IAsyncResult ar) { Stream […]

我在使用FileStream.ReadAsync()时应该以异步模式打开文件吗?

为FileStream执行异步I / O的旧.Net方法是使用FileStream.BeginRead()和FileStream.EndRead() 。 FileStream.BeginRead()的MSDN文档指出: FileStream提供两种不同的操作模式:同步I / O和异步I / O. 虽然可以使用其中任何一种,但底层操作系统资源可能仅允许以这些模式之一进行访问。 默认情况下,FileStream会同步打开操作系统句柄。 在Windows中,这会降低异步方法的速度。 如果使用异步方法,请使用FileStream(String,FileMode,FileAccess,FileShare,Int32,Boolean)构造函数。 为FileStream执行异步I / O的.Net 4.5x方法是使用Stream.ReadAsync() 。 FileStream.ReadAsync()的MSDN文档直接链接到Stream.ReadAsync()的文档。 本文档未提及是否需要以异步模式打开文件; 实际上,文档中的示例代码显然不会这样做。 因此,我假设在使用File.ReadAsync() ,无需以异步模式打开文件。 这个假设是否正确? [编辑] 我刚刚发现了一篇关于使用Async for File Access的MSDN文章 。 这表明: 本主题中的示例使用FileStream类,该类具有导致在操作系统级别发生异步I / O的选项。 通过使用此选项,您可以避免在许多情况下阻止ThreadPool线程。 要启用此选项,请在构造函数调用中指定useAsync = true或options = FileOptions.Asynchronous参数。 所以现在我认为我应该以异步模式打开文件…如果是这样,有点不幸的是, ReadAsync()文档中提供的示例代码不会异步打开文件!