문제

얼마 전, 나는 알림을 위해 사용자에게 메시지 상자를 표시 해야하는 상황을 가로 질러 달렸지 만 GUI 스레드를 차단하기 때문에 MessageBox.show를 사용할 수 없습니다 (따라서 대화 상자가 활성화되는 동안 화면에 아무것도 업데이트되지 않음). 대안에 대한 제안이 있습니까?

당시 대안을 코딩했지만 마음에 들지 않습니다. 그래도 더 나은 것이 나타나면 답으로 게시하겠습니다.

편집 : 대화 상자는 기본 창 위에 떠 다니야합니다. 작업 표시 줄에 나타나지 않든 상관 없습니다. 특정 상황에서 하나 이상의 대화 상자가 한 번에 활성화 될 수 있습니다.

부록 : 내 솔루션은 완료 및 취소 된 이벤트를 방출 할 OK 및 취소 버튼을 제공하는 기본 형태였습니다. OK 서브 클래스 재정의 가상 Validatedata라고합니다. 호출 양식은 속성을 사용하여 매번 양식을 재현하지 않기 위해 (양식이 닫히지 않고 숨겨져 있음) 동일한 양식이 두 번 이상 활성화되는 것을 방지하기 위해 활성 양식 사전을 유지했습니다. 이것은 모달 형태처럼 보이며 한 번에 여러 팝업 양식을 지원하지만 기본 GUI 스레드를 묶지 않습니다.

도움이 되었습니까?

해결책

나는 RSLITE 및 Mitchel 판매자에 동의합니다. 필요한 정보를 표시하기 위해 비 모달 양식을 작성하는 것이 가장 좋은 경로입니다. 여러 메시지가있는 경우 ListBox에 넣는 것을 고려하고 사용자에게 두 번 클릭하여 전체 정보를 표시해야합니다.

다른 팁

다른 사람들이 말했듯이 비 모달 접근법을 사용하는 것이 좋습니다.

  • 알림을 원한다면 풍선 팁 (TNA 또는 자신의) 또는 Outlook 메일 알림 또는 Trillian Display와 같은 많은 인스턴트 메신저와 같은 창을 사용해 볼 수 있습니다.
  • 사용자에게 행동 할 수있는 기회를주고 싶다면 비 모달 형태를 사용하지만 클릭 할 수 있다는 것을 기억하십시오.
  • 사용자가 귀하의 메시지에 따라 행동 해야하는 경우 Modal로 가야합니다. 소유자 창이 여전히 페인트 칠하고 GUI를 새로 고칠 수 있습니다. 결국 모달 대화 상자에는 메시지 펌프가 있습니다. 그렇지 않으면 작동하지 않습니다. 나는 최근에 그런 일을했는데, 우리는 GUI가 새로 고침 할 행동과 화재 이벤트를 수행 할 배경 작업자 스레드 풀과 메시지 펌프를 얻은 모달 대기 대화 상자를 가지고있었습니다. 소유자 창은 예상대로 배경 조치로 업데이트되었습니다.

a를 추가하는 것은 어떻습니까 Notifyicon 응용 프로그램 및 표시 a 풍선 팁. 아래쪽은 짧은 시간이 지나면 알림이 사라질 것이지만 사용자가 조치를 취할 필요가 없다면 사용자에게 가장 좋습니다.

비 모달 대화 상자 나 특정 요구 사항에 따라 일부 툴팁을 사용하여이를 해결합니다.

차단을 원하지 않는다면 디스플레이를 수행하기 위해 나만의 간단한 양식 만 만들었습니다. 비 차단 솔루션이 필요한 경우 고객을위한 아이템을 완료 한 방법입니다. 그러나 블로킹이 아닌 사람이라면 사용자가 배수를 얻을 수 있고 실제로 "행동해야한다"라면 압도 당할 수 있습니다.

제안에 기여한 모든 분들께 감사드립니다. 내 해결책은 옳은 것 같습니다 ;-)

내 솔루션은 완료 및 취소 된 이벤트를 방출 할 OK 및 취소 버튼을 제공하는 기본 형식이었습니다. OK 서브 클래스 재정의 가상 Validatedata라고합니다. 호출 양식은 속성을 사용하여 매번 양식을 재현하지 않기 위해 (양식이 닫히지 않고 숨겨져 있음) 동일한 양식이 두 번 이상 활성화되는 것을 방지하기 위해 활성 양식 사전을 유지했습니다. 이것은 모달 형태처럼 보이며 한 번에 여러 팝업 양식을 지원하지만 기본 GUI 스레드를 묶지 않습니다.

MessageBox 모양과 느낌을 원한다면 백그라운드 스레드에 표시하십시오.

ThreadPool.QueueUserWorkItem( (state) =>
    {
         MessageBox.Show("Your message");
    });

(테스트되지 않음)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top