ShowDialog, PropertyGrid 및 타이머 문제
-
09-09-2019 - |
문제
이상한 버그가 있습니다. 이유에 대한 단서가 있으면 알려주세요.
나는있다 Timer
(System.Windows.Forms.Timer
) 내 주요 양식에서 일부 업데이트가 발생하고 결국 기본 양식 UI를 업데이트합니다. 그런 다음 편집자가 있는데,이 편집자는 다음을 사용하여 기본 양식에서 열립니다. ShowDialog()
방법. 이 편집기에는 a가 있습니다 PropertyGrid
(System.Windows.Forms.PropertyGrid
).
매번 재현 할 수는 없지만 종종 해당 속성 그리드에서 드롭 다운을 사용하면 편집기가 붙어 있습니다. 확인/취소 버튼은 양식을 닫지 않습니다. 속성 그리드가 사용할 수 없게됩니다. 헤더가 작동하지 않습니다.
백그라운드에는 예외가 없으며 프로세스를 중단하면 앱이 처음에 언급 한 업데이트와 관련된 계산을 수행하고 있음을 알 수 있습니다.
무엇을 추천 할 수 있습니까? 모든 아이디어를 환영합니다.
해결책
일어나는 일은 스레드 타이머의 진드기 메소드가 다른 스레드에서 실행되지 않으므로 다른 모든 것을 잠그고 완료 될 때까지 모든 것을 잠그고 있다는 것입니다. 타이머와 2 개의 버튼이있는 테스트 winforms 앱을 만들었습니다.
private void timer1_Tick(object sender, EventArgs e)
{
Thread.Sleep(6000);
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
frmShow show = new frmShow();
show.ShowDialog(); // frmShow just has some controls on it to fiddle with
}
그리고 실제로 당신이 설명한대로 막혔습니다. 다음은 해결했습니다.
private void timer1_Tick(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(DoStuff);
}
private void DoStuff(object something)
{
Thread.Sleep(6000);
}
제휴하지 않습니다 StackOverflow