나는 GUI 창 양식이 있습니다. 나는 pictureBox에 이미지를 설정하고 다음에 3 초 동안 sleep하고 싶습니다.GUI 양식 및 스레드 잠자기에 설정 무어
pictureBox.Image = image;
Thread.Sleep(3000);
하지만 위의 내 코드처럼한다면, 내 양식은 후 내 양식 자체를 그립니다 다음, 이미지를 설정 3 초 동안 잠 가서하려고합니다. 그래서 내 그림은 3 초 후에 보여. 어떻게 이미지를 설정하고, 보여 주며, 바로 그 후에 "잠들"을 할 수 있습니까? 1
편집 정확히 내가 그런 일을하고 싶지 :
나는 두 개의 스레드, UI 및 GUI가 있습니다. UI는 net 소켓에서 읽고 GUI에서 올바른 방법으로 호출합니다. GUI에 설정 이미지
- UI 전화 : 그리고 그와 같은 스크립트 될 수 있습니다 뭔가를 할
를 (다음 GUI 이미지를 지워야합니다) 그러나 나는 확실히 갖고 싶어, 나는이 이미지를 볼 수있을 것이다. 그래서 GUI set image 후에, 나는이 스레드를 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();
}
}
는 그리고 난과 F2 후, 내 UI 스레드 호출 함수 F1을 할 내 사용자가이 사진을 볼 수 있는지 확인하십시오. 하지만 내 UI 스레드가 함수 f1을 호출하고 f3..fn 사이의 일부가 정상적으로 호출하는 경우 내가 (UI에 의해 호출) GUI 형태의 기능 정의 :
편집이
없음 나는 것을 확인하지
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가 3 초 동안 잠자기 상태가되고 예상치 않습니다.
내 문제의 가장 좋은 해결책은 무엇입니까?
수면 이전에 this.Refresh()를 넣으십시오. 그것은 최선의 해결책은 아니지만 일해야합니다. –