我正在尝试检查是否需要Invoke,如果成功,我正在尝试访问GridView以检查任何值并执行某些操作,但是当我尝试访问Gridview时,它会抛出一个异常,即Crossthreading,请帮我。 这是代码:
if (InvokeRequired)
{
this.Invoke(new MethodInvoker(delegate
{
if ((_grdAccBills.Tag == null) ||
(_grdAccBills.Tag.ToString() !=
(TxtAccNumber.Text.Trim() + "|" + ((Property != null) ? Property.HMY.ToString() : "0"))))
{
//do sometihng
}
}));
}
这是一个例外:
{“跨线程操作无效:控制'_grdAccBills'从其创建的线程以外的线程访问。”}
答案 0 :(得分:0)
您发布的代码应该可以正常工作,从代码中我需要猜测可能出错的地方。
当您获得Crossthreading异常时,访问该控件的代码不在创建该控件的同一线程上。 this.Invoke
将代码带入this
的主要UI主题,最常见的是Form
。因此this
Form
的主要UI主题应与_grdAccBills
不同。那就是:
this
Form
与拥有Form
的{{1}}不同吗?_grdAccBills
?然后它应该无法显示在_grdAccBills
this
有关UI结构的更多信息可能有助于查明问题。
最后,一些不会导致异常的东西,但在代码中是错误的:代码应该在从另一个线程调用时正确运行,但它在主UI线程的运行中没有任何点。正确的方法是:
Form