Отписавшись от события, все равно его увольняют много раз, как это остановить?
Сначала я подписываюсь на событие, а затем в методе, который будет выполнен, когда это событие произойдет, я отменяю его подписку.Но все же я думаю, что его увольняют много раз.
Что я уже пробовал:
using System; using System.Collections.Generic; using System.IO; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SerialPortHexCommunication { public class Program { private static bool unsubscribe=false; static void Main(string[] args) { SerialPort port = new SerialPort(); port.PortName = "COM5"; port.Parity = Parity.None; port.BaudRate = 9600; port.DataBits = 8; port.StopBits = StopBits.One; if (port.IsOpen) { port.Close(); port.Dispose(); } port.Open(); byte[] bytesToSend = new byte[6] { 0xD0, 0xF2, 0xFF, 0x00, 0x06, 0xC7 }; port.Write(bytesToSend, 0, bytesToSend.Length); port.DataReceived += new SerialDataReceivedEventHandler(new cEventHandler().DataReceivedHandler); port.DataReceived -= new SerialDataReceivedEventHandler(new cEventHandler().DataReceivedHandler); Console.ReadKey(); port.Close(); port.Dispose(); } } }
using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SerialPortHexCommunication { public class cEventHandler { public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) {//this In data receive message should be printed only once //as i am unsubscribing but it get printed many times. Console.WriteLine("In data receive"); SerialPort port = (SerialPort)sender; port.DataReceived -= new SerialDataReceivedEventHandler(DataReceivedHandler); int bytes = port.BytesToRead; byte[] buffer = new byte[bytes]; if (port.BytesToRead > 1) { port.Read(buffer, 0, bytes); } foreach (byte item in buffer) { Console.WriteLine(item); } port.DataReceived -= new SerialDataReceivedEventHandler(new cEventHandler().DataReceivedHandler); //Console.ReadKey(); } } }