Mus*_*rer 0 c# multithreading sleep
下面的代码部分有什么问题?有任何想法吗?我通过串口向我的设备发送命令.在每个命令之后,设备将为此命令工作,然后另一个命令为此启动并继续这样.
在Button Click事件中
{
function1();
Thread.Sleep(5000);
function2();
Thread.Sleep(5000);
function3();
}
Run Code Online (Sandbox Code Playgroud)
我想出如果我从下面的代码中擦除第二次睡眠和function3,它会同时执行两个功能,但如果我想继续这样的方式它不会执行第三次.
在Button Click事件中
{
function1();
Thread.Sleep(5000);
function2();
}
Run Code Online (Sandbox Code Playgroud)
工作......谢谢
你正在阻止UI线程.不要那样做.这意味着您的UI无法自行更新.相反,System.Windows.Forms.Timer
使用下一个要调用的函数在5秒内设置为触发.或者,完全在另一个线程中完成所有这些(可能使用Sleep
,可能使用另一种计时器来触发线程池线程),并Control.Invoke/BeginInvoke
在需要更新UI本身时用于编组回UI线程.
编辑:鉴于你的"答案",似乎阻止UI线程只是其中一个问题 - 让设备正确响应是一个更大的问题.你不应该只依赖睡眠一段时间.您应该检测设备何时完成上一个命令.它可能没有给出任何反馈,但这可能是可怕的糟糕设计.如果可能的话,研究如何从设备读取关于何时完成的反馈(例如从串口读取!),并且仅在前一个命令完成时启动下一个命令.根据您收到反馈的方式,您可以在非UI线程上使用阻塞调用,或使用异步模型触发事物.