从后台工作者调用方法

时间:2011-05-24 09:03:06

标签: c# c#-3.0

我有一个后台工作者调用一个方法 DoWork活动。

此方法访问UI线程中的数据集,它还调用UI线程中的另一个方法。

当问题需要访问Ui Thread中存在的数据集和方法时,我的问题就出现了,我得到了一个跨线程操作无效的错误。

如何访问Items UI Thread? 我可以使用backgroundworker访问它,还是必须使用另一种在后台线程中运行我的方法的方法

由于

3 个答案:

答案 0 :(得分:2)

您只需要将方法调用封送到UI线程 在WinForms上:

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

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

答案 1 :(得分: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>

实现相同目标

答案 2 :(得分:0)

您应该使用Dispatcher.Invoke方法

了解更多信息,请查看以下链接

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.invoke.aspx