我有一個Action委託:DataGridView.Invoke凍結
public static Action SubscribeForTable;
我與我的Objects
方法
public void SubscribeMe()
{
Parallel.For(0, ACCESS.GetAppCount(), AppCheck);
CheckTable(true);
}
加載它,所以我有一個代表,它包含相同的功能,但不同的對象。
那麼我這樣做:
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 +線程進行調試。 –