我有一个GUI窗口窗体。我想将图像设置为pictureBox,然后下一次睡眠3秒。设置GUI窗体和线程睡眠
pictureBox.Image = image;
Thread.Sleep(3000);
但如果我这样做我上面的代码,我的形式尝试设置图像,旁边睡觉3秒,只是我的形式绘制本身之后。所以我的照片在这3秒后显示。我怎样才能设置图像,展示它,并在那之后“去睡觉”?
编辑1
正是我想要做这样的事情:
我有两个线程,UI和GUI。 UI从网络套接字读取并从GUI调用正确的方法。并且可以脚本这样的:在GUI设置图像
- UI调用做一些事情(当时GUI必须清除图像)
但我想有肯定,我将能够看到这个图像。所以在GUI设置图像之后,我将这个线程调用了3秒钟。那么,我该怎么做呢?
例子: (从GUI功能)
public void f1() {
MethodInvoker method =() => {
pictureBox.Image = image;
pictureBox.Update();
// do something more
};
if (InvokeRequired) {
Invoke(method);
} else {
method();
}
}
public void f2() {
MethodInvoker method =() => {
pictureBox.Image = null;
pictureBox.Update();
// do something more
};
if (InvokeRequired) {
Invoke(method);
} else {
method();
}
}
与其他功能F3 ... FN
public void f3() {
MethodInvoker method =() => {
// do something
};
if (InvokeRequired) {
Invoke(method);
} else {
method();
}
}
而且,我在我的UI线程调用函数f1和之后F2,我想以确保我的用户能够看到这张照片。但是,如果我的UI线程调用函数f1和一些之间的f3..fn正常调用它。
编辑2
不,我让那: 我定义GUI形式的功能(这是由UI调用):
public void f1() {
MethodInvoker method =() => {
pictureBox.Image = image;
pictureBox.Update();
};
MethodInvoker method2 =() => {
// something
}
if (InvokeRequired) {
Invoke(method);
Thread.Sleep(3000); // sleep UI thread
Invoke(method2);
} else {
method();
method2();
}
}
它的工作原理,但它不是最好的解决办法。如果将这样的脚本:
- UI call f1
- UI call f3
用户界面将睡3秒,我不指望它。
什么是我的问题的最佳解决方案?
把这个.Refresh()之前的睡眠。这不是最好的解决方案,但应该工作。 – 2011-06-14 22:09:47