문제

이상한 버그가 있습니다. 이유에 대한 단서가 있으면 알려주세요.

나는있다 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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top