Бесконечный цикл в отдельном потоке - C#
Формулировка задачи:
Здравствуйте!
Помогите пожалуйста решить проблему.
Есть метод relayStatus. Данный метод опрашивает определенное устройство путем ввода команды и чтения ответа из буфера.
Мне нужно реализовать автоматический вызов данного метода каждые 0.25 сек, так что бы можно было пользоваться другими функциями приложения. Пытался реализовать в отдельном потоке с бесконечным циклом и тред слипом.Как то вот так :
В итоге приложение отказывается запускаться либо виснет...
Прошу не кидаться камнями, в шарпе вторую неделю работаю. Но очень нужно это дело реализовать. Спасибо!
Заработало! Но во первых тормозит программа, во вторых иногда вылетает. Подскажите как сделать по правильному? Смысл вот в чем. С помощью данного метода запускается метод обновляющий индикацию в интерфейсе. То есть если к девайсу подключились с другого компа и что-то изменили в настройках, я вижу эти изменения риалтайм.
private void relayStatus() { try { asyncHandle = mbSession.BeginWrite("ROUT:CLOS? (@F01A11(0101:0106))", new AsyncCallback(OnWriteComplete), null); asyncHandle = mbSession.BeginRead(mbSession.DefaultBufferSize, new AsyncCallback(relayStatusResult), null); System.Threading.Thread.Sleep(100); } catch { } }
public MainForm() { Thread t = new Thread(relayStatus); t.Start(); } private void relayStatus() { while(true) { try { asyncHandle = mbSession.BeginWrite("ROUT:CLOS? (@F01A11(0101:0106))", new AsyncCallback(OnWriteComplete), null); asyncHandle = mbSession.BeginRead(mbSession.DefaultBufferSize, new AsyncCallback(relayStatusResult), null); System.Threading.Thread.Sleep(250); } catch { } }
Сделал так:
public MainForm() { Thread t = new Thread(relayStatus); t.Start(); } private void relayStatus() { while(true) { try { asyncHandle = mbSession.BeginWrite("ROUT:CLOS? (@F01A11(0101:0106))", new AsyncCallback(OnWriteComplete), null); asyncHandle = mbSession.BeginRead(mbSession.DefaultBufferSize, new AsyncCallback(relayStatusResult), null); System.Threading.Thread.Sleep(250); Application.DoEvents(); } catch { } }
Решение задачи: «Бесконечный цикл в отдельном потоке»
textual
Листинг программы
var timer = new Timer(1000); //таймер срабатывает каждую секунду timer.Elapsed += (sender, e) => MessageBox.Show("Timer elapsed"); //И печатает на экран что-то timer.Start();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д