Бесконечный цикл в отдельном потоке - 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();