[英]SerialPort.DataReceived doesn't work in Windows Service / Session Zero
The DataReceived event never gets called in a C# .NET service running in session zero BUT does in a console app or service running in the current user session. 在会话零运行的C#.NET服务中永远不会调用DataReceived事件,但在当前用户会话中运行的控制台应用程序或服务中却不会执行。 Am I missing some permission? 我缺少一些许可吗?
/// <summary>
/// Opens the first avaliable COM port that matches the vid/pid
/// </summary>
public static bool OpenComDevice(string vid, string pid, out SerialPort serialPort)
{
serialPort = null;
// find server com port
var regPortNames = ComPortNames(vid, pid);
foreach (string name in SerialPort.GetPortNames())
{
if (regPortNames.Contains(name))
{
try
{
serialPort = new SerialPort(name);
serialPort.DtrEnable = true;
serialPort.Open();
}
catch
{
if (serialPort != null)
{
serialPort.Dispose();
serialPort = null;
}
continue;
}
break;
}
}
return serialPort != null;
}
private void Connect()
{
if (!Utils.OpenComDevice("239A", "801E", out serial)) return;
DebugLog.Log("Connected: " + serial.PortName);
serial.DataReceived += Serial_DataReceived;
serial.PinChanged += Serial_PinChanged;
serial.ErrorReceived += Serial_ErrorReceived;
isConnected = true;
ConnectedEvent?.Invoke(serial.PortName);
}
在用于Windows服务的.NET中,您需要调用Dispatcher.Run()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.