我有一個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