簡體   English   中英

SerialPort.DataReceived在Windows服務/會話零中不起作用

[英]SerialPort.DataReceived doesn't work in Windows Service / Session Zero

在會話零運行的C#.NET服務中永遠不會調用DataReceived事件,但在當前用戶會話中運行的控制台應用程序或服務中卻不會執行。 我缺少一些許可嗎?

/// <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM