Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
C# SerialPort事件不会在使用.NET 2.0应用程序的Windows Server 2008上触发_C#_.net_Vb.net_.net 2.0_Serial Port - Fatal编程技术网

C# SerialPort事件不会在使用.NET 2.0应用程序的Windows Server 2008上触发

C# SerialPort事件不会在使用.NET 2.0应用程序的Windows Server 2008上触发,c#,.net,vb.net,.net-2.0,serial-port,C#,.net,Vb.net,.net 2.0,Serial Port,我有一个程序,通过串口从扫描仪读取数据。此程序在Windows XP上运行良好。我们有一个运行Windows server 2008的终端服务器。我在我们的测试终端上运行超级终端,它通过COM1连接并读取扫描仪数据。我在同一个测试终端上运行我的应用程序,但扫描时什么也没有得到 我的应用程序连接到COM1没有错误,断开连接没有错误。但是,DataReceived事件永远不会被触发。ErrorReceived事件也不是。我玩过握手、ReceivedBytesthreshHold和几乎所有我找到的设置

我有一个程序,通过串口从扫描仪读取数据。此程序在Windows XP上运行良好。我们有一个运行Windows server 2008的终端服务器。我在我们的测试终端上运行超级终端,它通过COM1连接并读取扫描仪数据。我在同一个测试终端上运行我的应用程序,但扫描时什么也没有得到

我的应用程序连接到COM1没有错误,断开连接没有错误。但是,DataReceived事件永远不会被触发。ErrorReceived事件也不是。我玩过握手、ReceivedBytesthreshHold和几乎所有我找到的设置。完全按照超级终端上的设置进行设置。我甚至试着在不同的线程上启动一个计时器,每秒调用ReadByte,试图让它做一些事情。什么都没起作用

我一整天都在努力解决这个问题。在我的课堂上添加了事件,试图看到正在发生的一切。我所知道的是,它连接到端口,并正确地从端口断开连接,但其间没有发生任何事情。扫描时没有数据。在连接端口和断开端口之间根本不会触发任何事件。我厌倦了谷歌

救命!!拜托

PS我还下载了other的简单串行通信应用程序。在.NET中没有任何功能。期间::-

端口设置代码mvarSerialPort为COM1:

If ComPort Is Nothing Then  
    ComPort = New SerialPort(mvarSerialPort)  
    ComPort.BaudRate = 9600  
    ComPort.Parity = Parity.None  
    ComPort.StopBits = StopBits.One  
    ComPort.DataBits = 8  
    ComPort.ReadTimeout = 2000  
    ComPort.Encoding = System.Text.Encoding.ASCII  
    ComPort.Handshake = Handshake.None  
    ComPort.ReceivedBytesThreshold = 1  
End If  
If Not ComPort.IsOpen Then ComPort.Open()  
ComPort.DtrEnable = True  
从未在该darn终端上触发的DataReceived事件:

Private Sub Scan(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)     Handles ComPort.DataReceived  
    Dim sDataStatus As String = ""  
    Select Case e.EventType  
        Case SerialData.Chars  
            sDataStatus = "Data Received Event - Chars "  
        Case SerialData.Eof  
            sDataStatus = "Data Received Event - Eof"  
    End Select  

    RaiseEvent ClassStatus(sDataStatus)   

    Dim delInvoke As ScanResults
    delInvoke = New ScanResults(AddressOf RaiseScanEvent)
    delInvoke.Invoke()

End Sub  
RaiseScanEvent这在我和我同事运行XP的计算机上非常有效

Private Sub RaiseScanEvent()  
    Dim sScanned As String = ComPort.ReadLine.TrimEnd  
    RaiseEvent ClassStatus("RaiseScanEvent data: " & sScanned)  
    RaiseEvent ComDataReceived(sScanned)  
End Sub

恐怕这不是一个确定的答案,但有几件事需要尝试/考虑:

mvarSerialPort在终端上真的具有COM1的值吗

可能在打开端口之前尝试设置DtrEnable=True

使用端口监视器(如)是一个好主意,尽管它确实会提供相当低的级别信息。您可以将PC的工作结果与终端机器进行比较。至少,当扫描器工作时,它可以向您显示任何活动

但是,如果您的终端机器上有另一个COM端口的可能性越来越小,但是您可以使用USB串行转换器进行测试,您可以尝试制作/购买一个USB串行转换器,然后您可以将这两个端口连接在一起。通过这种方式,你可以将你的应用程序连接到COM1,将超级终端连接到COM2或任何东西。这将有效地允许您使用超级终端键入应用程序


如果你下载的代码和你的一样不起作用,那么这不是串口配置问题。问题似乎源于服务器本身—一些配置、策略、权限或其他—阻止应用程序接收数据。我建议你对这个问题采取技术支持的态度,通过诊断问题并从服务器端寻找可能导致这个问题的信息。尝试下载使用串行端口的其他应用程序。也许“免费串行端口监视器”会有所帮助。暂时把代码放在一边,伊姆霍。是的,mvarSerialPort真的很好用这是我检查的第一件事。我试过在之前和之后设置DtrEnable以及其他一些设置lol看起来这是终端软件的问题。.NET应用程序在CE4上工作,但在CE5上不工作。系统人员打电话给制造商,想知道发生了什么。我会不断更新这个问题,以防其他人遇到这个问题。@Pamela:好的,我很想看看他们有什么想法。祝你好运制造商必须解决这个问题。我们不得不将终端软件降级到以前的版本,直到他们修复新版本。