DispatcherTimer не отрабатывает событие EventHandler - C#
Формулировка задачи:
Добрый день. Есть небольшая проблема с DispatcherTimer. По какой то непонятной причине не отрабатывается EventHandler с записью данных в СОМ порт, только если вызывать напрямую.
код:
Листинг программы
- private static SerialPort oSerialPort;
- private void btnPush_Click(object sender, RoutedEventArgs e)
- {
- intcount = 10;
- intsec = 5;
- while (j <= intcount)
- {
- fname = "data.txt";
- if (j <= intcount)
- {
- try
- {
- System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
- dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
- dispatcherTimer.Interval = new TimeSpan(0, 0, intsec);
- dispatcherTimer.Start();
- dispatcherTimer_Tick(null, EventArgs.Empty); //ПИШУ РУКАМИ
- }
- catch
- {
- }
- }
- j++;
- }
- }
- private void dispatcherTimer_Tick(object sender, EventArgs e)
- {
- if (j <= intcount)
- {
- var indata = File.ReadAllBytes(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), fname));
- var output = portNo.Text;
- oSerialPort = new SerialPort(output);
- oSerialPort.BaudRate = 9600;
- oSerialPort.Parity = Parity.None;
- oSerialPort.StopBits = StopBits.One;
- oSerialPort.DataBits = 8;
- oSerialPort.Handshake = Handshake.None;
- oSerialPort.Open();
- oSerialPort.Write(indata, 0, indata.Length);
- oSerialPort.Close();
- }
- }
Решение задачи: «DispatcherTimer не отрабатывает событие EventHandler»
textual
Листинг программы
- async void btnStress_Click(object sender, RoutedEventArgs e)
- {
- intcount = int.Parse(count.Text);
- intsec = int.Parse(sec.Text);
- var tcs = new TaskCompletionSource<object>();
- System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
- dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
- dispatcherTimer.Interval = new TimeSpan(0, 0, intsec);
- dispatcherTimer.Start();
- // dispatcherTimer_Tick(null, EventArgs.Empty);
- while (j <= intcount)
- {
- if (j <= intcount)
- {
- try
- {
- await tcs.Task;
- tcs = new TaskCompletionSource<object>();
- }
- finally
- {
- dispatcherTimer.Stop();
- }
- }
- else
- {
- dispatcherTimer.Stop();
- }
- }
- }
- private void dispatcherTimer_Tick(object sender, EventArgs e)
- {
- if (j <= intcount)
- {
- j++;
- Random rnd = new Random();
- int cheque = rnd.Next(1, 23);
- fname = "data.txt";
- var indata = File.ReadAllBytes(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), fname));
- var output = portNo.Text;
- oSerialPort = new SerialPort(output);
- oSerialPort.BaudRate = 9600;
- oSerialPort.Parity = Parity.None;
- oSerialPort.StopBits = StopBits.One;
- oSerialPort.DataBits = 8;
- oSerialPort.Handshake = Handshake.None;
- oSerialPort.Open();
- oSerialPort.Write(indata, 0, indata.Length);
- oSerialPort.Close();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д