我有一個後臺工作人員調用了 DoWork事件中的方法。從後臺工作人員調用方法
此方法訪問UI線程中的數據集,它還調用UI線程中的另一個方法。
我的問題出現在該方法需要訪問存在於Ui線程中的數據集和方法時,我得到一個跨線程操作無效的錯誤。
如何訪問Items UI Thread? 是否有可能對我來說,使用BackgroundWorker訪問它還是我必須用我的運行方法在後臺線程
感謝
我有一個後臺工作人員調用了 DoWork事件中的方法。從後臺工作人員調用方法
此方法訪問UI線程中的數據集,它還調用UI線程中的另一個方法。
我的問題出現在該方法需要訪問存在於Ui線程中的數據集和方法時,我得到一個跨線程操作無效的錯誤。
如何訪問Items UI Thread? 是否有可能對我來說,使用BackgroundWorker訪問它還是我必須用我的運行方法在後臺線程
感謝
你只需要當元帥的方法調用到UI線程的另一種方法。
論的WinForms:
void DoWork(...)
{
YourMethod();
}
void YourMethod()
{
if(yourControl.InvokeRequired)
yourControl.Invoke((Action)(() => YourMethod()));
else
{
//Access controls
}
}
在UI線程創建的控制不能在正常的方式的另一個線程訪問。請創建一個委託並使用control.Invoke調用委託。
下面提供的方法,樣品可以用來啓用按鈕的知名度,無論你是在線程上下文的。
private void EnableButtonVisibility(Button btn, bool enable)
{
if (!btn.InvokeRequired)
{
btn.Visible = enable;
}
else
{
btn.Invoke(new EnableButtonVisibilityHandler(EnableButtonVisibility), btn, enable);
}
}
delegate void EnableButtonVisibilityHandler(Button btn, bool enable);
您也可以使用Action<Button, bool>
你應該使用達到相同Dispatcher.Invoke方法
更多信息看看下面的鏈接
http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.invoke.aspx
謝謝丹尼爾它像一個魅力:) – Yugz 2011-05-24 12:04:30