如何在C#中的IF语句中使用方法调用程序来检查Gridvalues

时间:2015-09-18 16:35:47

标签: c# .net winforms backgroundworker

我正在尝试检查是否需要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'从其创建的线程以外的线程访问。”}

1 个答案:

答案 0 :(得分:0)

您发布的代码应该可以正常工作,从代码中我需要猜测可能出错的地方。

当您获得Crossthreading异常时,访问该控件的代码不在创建该控件的同一线程上。 this.Invoke将代码带入this的主要UI主题,最常见的是Form。因此this Form的主要UI主题应与_grdAccBills不同。那就是:

  1. this Form与拥有Form的{​​{1}}不同吗?
  2. 是否在另一个帖子上创建了_grdAccBills?然后它应该无法显示在_grdAccBills this
  3. 有关UI结构的更多信息可能有助于查明问题。

    最后,一些不会导致异常的东西,但在代码中是错误的:代码应该在从另一个线程调用时正确运行,但它在主UI线程的运行中没有任何点。正确的方法是:

    Form