Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用串行端口失败时控制台CTRL-C处理_Vb.net_Serial Port_Copy Paste - Fatal编程技术网

Vb.net 使用串行端口失败时控制台CTRL-C处理

Vb.net 使用串行端口失败时控制台CTRL-C处理,vb.net,serial-port,copy-paste,Vb.net,Serial Port,Copy Paste,使用VB.Net,我添加了一个CTRL-C处理程序: AddHandler Console.CancelKeyPress, AddressOf QuitHandler 以下哪项功能: Private Sub QuitHandler(ByVal sender As Object, ByVal args As ConsoleCancelEventArgs) Console.WriteLine("Quitting...") args.Cancel = True

使用VB.Net,我添加了一个CTRL-C处理程序:

 AddHandler Console.CancelKeyPress, AddressOf QuitHandler
以下哪项功能:

Private Sub QuitHandler(ByVal sender As Object, ByVal args As ConsoleCancelEventArgs)

        Console.WriteLine("Quitting...")
        args.Cancel = True
        Quit = True
    End Sub
然后我有一个主循环,它一直运行到Quit=True

在我开始从串行端口读取之前,这一切都有效:

 Private Sub port_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Port.DataReceived
此时CTRL-C处理程序将被忽略约30秒,此时控制台应用程序将终止,而不执行清理代码


为什么?

我不知道VB,但我猜您试图从串行端口读取数据,但该端口不存在错误,该端口存在,数据不存在;因此,您的程序将阻塞挂起,直到30秒后读取尝试超时


如果我是正确的,您需要一些方法来轮询串行输入而不阻塞,或者更好地在数据实际出现时调用异步sub。

您应该确保了解超时是如何工作的,因为您正在读取池上的串行端口。您的串行线程将始终运行并尝试读取某些内容

最好的方法是在数据可用时读取数据,这样串行线程就有时间呼吸了


您也可以尝试使用DoEvents。

port\u DataReceived本身就是一个处理程序,因此当数据出现时,它会在不同的线程上运行,因此它不应该阻塞主线程。CTRL-C一直工作到读取第一组数据为止,即如果在任何数据到达串行端口之前按CTRL-C,一切正常。数据每隔10秒左右到达端口,因此在应用程序退出之前会收到并显示三到四个批次。好的,我该放弃了。我的猜测对你没有帮助。很抱歉