问题:数据库里有三个字段,A、B、C,A字段的值是不断的变化,如果A=B+C值相等了,把当前记录值插入到datagridview中。写了个从数据库查询出A、B、C三个字段的函数,然后把函数在线程中执行, public void RepairAlarm()
        {
          while(true)
 {
if(A==B+C)
{
  //记录值插入到datagridview中,
  //报错-------线程间操作无效: 从不是创建控件“dgvEquipmentAlarm”的线程访问它。
  //这个地方该怎么写?线程间操作该怎么处理?
}
}
}
//线程调用的函数
            Thread t = new Thread(new ThreadStart(RepairAlarm));
            t.Start();
            Thread.Sleep(300);

解决方案 »

  1.   

    我用多线程遇到“线程间操作无效: 从不是创建控件****的线程访问它”时,我就在初始化的时候加入这一句:
    Form.CheckForIllegalCrossThreadCalls = False
      

  2.   

    线程安全机制的限制。
    参考http://www.evget.com/zh-CN/Info/catalog/10040.html
      

  3.   

    引用 3 楼 wind_and_cloud 的回复:我用多线程遇到“线程间操作无效: 从不是创建控件****的线程访问它”时,我就在初始化的时候加入这一句:
    Form.CheckForIllegalCrossThreadCalls = False这个不太推荐啊。学习下。
      

  4.   

    同意楼上不太建议忽略跨线程调用异常,最好使用delegate
      

  5.   

    什么是线程安全和线程不安全
    什么是ThreadSafe线程安全
    C#中跨线程访问控件: 委托, Invoke, BeginInvoke