在完成所有處理後,我正在運行使用Parallel.Invoke的重度後臺工作我返回該方法,再次返回,調用下一個方法來利用計算的數據我得到錯誤: 跨線程操作無效:從其創建的線程以外的線程訪問控制''。使用parallel.Invoke運行後臺工作後更新用戶界面
但是我已經從由Parallel.Invoke創建的線程返回到第一個調用它的線程中。控制不能恢復到啓動的線程是否正常?我怎麼能保證這確實發生?
代碼:
public void TopMethod()
{
Calculate(4);
UpdateGui();
}
public void Calculate(int depth)
{
Recursive(depth);
}
public void Recursive(int depth)
{
if (depth > 0)
System.Threading.Tasks.Parallel.Invoke(
delegate { Recursive(depth - 1); });
}
public void UpdateGui()
{
CalculateOhter(); // Works fine.
controlElement.Focus(); // Causes exception
}
編輯: 我知道Control.Invoke但這將是一個醜陋的解決方案(不想存儲代表在每個控制),程序需要等待所有的計算,以在它可以繼續之前完成。所以,如果我能以某種方式強制控制返回到我最初開始使用的線程,那將會更好。