我有一个后台工作者调用一个方法 DoWork活动。
此方法访问UI线程中的数据集,它还调用UI线程中的另一个方法。
当问题需要访问Ui Thread中存在的数据集和方法时,我的问题就出现了,我得到了一个跨线程操作无效的错误。
如何访问Items UI Thread? 我可以使用backgroundworker访问它,还是必须使用另一种在后台线程中运行我的方法的方法
由于
答案 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