2011-05-24 92 views
0

我有一個後臺工作人員調用了 DoWork事件中的方法。從後臺工作人員調用方法

此方法訪問UI線程中的數據集,它還調用UI線程中的另一個方法。

我的問題出現在該方法需要訪問存在於Ui線程中的數據集和方法時,我得到一個跨線程操作無效的錯誤。

如何訪問Items UI Thread? 是否有可能對我來說,使用BackgroundWorker訪問它還是我必須用我的運行方法在後臺線程

感謝

回答

2

你只需要當元帥的方法調用到UI線程的另一種方法。
論的WinForms:

void DoWork(...) 
{ 
    YourMethod(); 
} 

void YourMethod() 
{ 
    if(yourControl.InvokeRequired) 
     yourControl.Invoke((Action)(() => YourMethod())); 
    else 
    { 
     //Access controls 
    } 
} 
+0

謝謝丹尼爾它像一個魅力:) – Yugz 2011-05-24 12:04:30

0

在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>