C# 在GUI窗体和线程睡眠上设置一些内容
我有一个GUI窗口窗体。我想将图像设置为pictureBox,然后再睡3秒钟C# 在GUI窗体和线程睡眠上设置一些内容,c#,C#,我有一个GUI窗口窗体。我想将图像设置为pictureBox,然后再睡3秒钟 pictureBox.Image = image; Thread.Sleep( 3000 ); 但若我像上面的代码那个样做,我的表单会尝试设置图像,然后进入睡眠状态3秒钟,然后我的表单会自动绘制。所以我的照片在这3秒钟后显示出来。我如何设置图像,展示它,然后在“睡觉”之后呢 编辑1 确切地说,我想做这样的事情: 我有两个线程,UI和GUI。用户界面从网络套接字读取数据,并从用户界面调用正确的方法。可以是这
pictureBox.Image = image;
Thread.Sleep( 3000 );
但若我像上面的代码那个样做,我的表单会尝试设置图像,然后进入睡眠状态3秒钟,然后我的表单会自动绘制。所以我的照片在这3秒钟后显示出来。我如何设置图像,展示它,然后在“睡觉”之后呢
编辑1
确切地说,我想做这样的事情: 我有两个线程,UI和GUI。用户界面从网络套接字读取数据,并从用户界面调用正确的方法。可以是这样的脚本:
- GUI上的UI调用:设置映像
- GUI上的UI调用:做点什么(然后GUI必须清除图像)
public void f3() {
MethodInvoker method = () => {
// do something
};
if ( InvokeRequired ) {
Invoke( method );
} else {
method();
}
}
而且,我的UI线程调用函数f1,在调用函数f2之后,我希望确保我的用户能够看到这张图片。但是如果我的UI线程调用函数f1,而f3..fn之间的函数调用正常
编辑2
不,我认为:
我以GUI形式定义函数(由UI调用):
这是可行的,但不是最好的解决方案。如果脚本是这样的:
- UI call f1
- UI call f3
用户界面将休眠3秒,我不期望它
我的问题的最佳解决方案是什么?试试以下方法之一:
Form.Refresh ();
Application.DoEvents;
我假设是WindowsForms。您不应该让GUI睡眠。至少不是你现在的样子。如果您使用
Thread.Sleep
或其他阻止机制,您将阻止UI执行它应该执行的操作;发送和处理消息
如果您真的想导致延迟操作,那么最好使用System.Windows.Forms.Timer
。这是我认为你需要做的。这当然是基于我对你所说的“去睡觉”的模糊理解
- 树立你的形象
- 然后立即禁用模拟“进入睡眠”对您意味着什么的所有必要控件
- 然后启动计时器
- 最后在
事件中添加代码,逆转“进入睡眠”对您意味着什么勾选
- UI call f1
- UI call f3
Form.Refresh ();
Application.DoEvents;