나는 액션 위임을 정지.DataGridView.Invoke는
Parallel.Invoke(SubscribeForTable);
그래서 그것을 실행하는 시작하고, 난 기다릴 ... 난 기다릴 ... 그리고 아무 반응이 없습니다 :
그때 나는이 할! 응용 프로그램이 멈췄습니다! 그런 다음 디버거를 시작했습니다.
복귀 기능 SubscribeMe()
에
Parallel.For(0, ACCESS.GetAppCount(), AppCheck); //OK
CheckTable(true); // lets see what is in
은 그 때 나는
delegate void CheckTableCallback(bool check);
private void CheckTable(bool Subscribed)
{
if (DataGridView1.InvokeRequired) // OK
{
CheckTableCallback Safe = new CheckTableCallback(CheckTable); // OK
DataGridView1.Invoke(Safe, new Object[] {Subscribed}); //HANGS HERE!
}
else
{
....
은 그래서
DataGridView.Invoke
에 달려 ..이 함수로 보았다. 왜 그렇게? 희망을 올바르게 내 문제를 설명했다.
Invoke()를 사용하면 교착 상태가 발생할 수 있으므로 항상 BeginInvoke()를 사용하십시오. 이 교착 상태는 일반적으로 작업자 스레드가 완료 될 때까지 대기중인 UI 스레드가 사용 중이기 때문에 발생합니다. 그것은 기다려서는 안된다. Debug + Windows + Threads를 사용하여 디버깅하십시오. –