showdialog 창이 활성화 상태일때 사용자 쓰레드도 실행이 안되는건가요??

안녕하세요.

사내 라벨프로그램을 개발중인데 라벨 출력시 속도때문에 도저히 답이 안나와 사용자에게 기다리라는 의미로 프

린트 중입니다. 라는 알림창을 띄우려 합니다.

알림창은 dialog로 띄우는데 ShowDialog는 메인쓰레드가 멈추는 거라 들어서 출력하는 메소드를 쓰레드 처리했습니

다. 그런데 예상과 달리 알림창이 뜨면 따로 처리한 쓰레드도 진행이 되질 않습니다. ㅠㅠ

출력이 되는 동안에는 사용자가 조작을 할수 없도록 메인창은 비활성화 상태여야 합니다. 어찌 처리를 해야할까요??

new Thread(label_print).Start();
pMessage.ShowDialog();

private void label_print(){
…프린트 및 기타 작업

 pMessage.Close();

}

3개의 좋아요

글에 맞는 카테고리로 변경해드렸습니다.

2개의 좋아요

UI 관련 작업은 UI 스레드 (메인 스레드)에서 해야 합니다. 윈폼이나 WPF가 그런 모델을 사용합니다. 그러므로

pMessage.Close()BeginInvoke(() => pMessage.Close())로 바꾸어야 하고요, 라벨링 할 때 UI 관련 작업 또한 마찬가지입니다.

간단하게 테스트하기 위해 다음의 코드로 확인하였습니다. 잘 동작합니다.

var waitForm = new WaitForm();
new Thread(() =>
{
    BeginInvoke(() => waitForm.ShowDialog());
    // 오래 걸리는 작업 시뮬레이션
    Thread.Sleep(5000);
    BeginInvoke(() => waitForm.Close());
}).Start();

다른 문제가 있는 것 같습니다.

6개의 좋아요

와~! 이 생각을 못했네요 다른 쓰레드에서 메인쓰레드를 호출한다걸;;; 샘플로 만들어서 해보니 잘 되네요~! 감사합니다~!!

2개의 좋아요