ITPub博客

首页 > 应用开发 > > 线程间操作无效: 从不是创建控件“XXX”的线程访问它。问题 路过的朋友帮忙看下

线程间操作无效: 从不是创建控件“XXX”的线程访问它。问题 路过的朋友帮忙看下

作者:cjk 时间:2019-08-21 13:15:49 0 删除 编辑

网上的解决方案:http://blog.csdn.net/jumtre/article/details/44927271

1:设置CheckForIllegalCrossThreadCalls false

2:委托

 

3:用BeginInvoke 或者异步线程

为什么我用了线程还是提示这个错误呢 不明白 看代码

void GetInstance_storeSelectChanged(object sender, StoreSelectChangedEventArgs e)
        {
            if (IsOk) return;
            var temp=frmMain.GetInstance.dialog.Entity;;
            if (temp == null || temp.Count == 0) return;
            var sourceno = temp.Aggregate("", (current1, xxx) => current1 + (xxx.sourceno + ",")).TrimEnd(',');
            Task.Factory.StartNew(() =>
            {
                var matappList = Voion.Core.SqlClientFactory.Instance.Query<matapp_dl>("SELECT * FROM matapp_dl WHERE docno=@docno", new { docno = sourceno });
                if (matappList == null || matappList.Count == 0) return;
                foreach (var tagetModel in matappList)
                {
                    var outlist = new stotheroutlst_pro
                    {
                        zbid = tagetModel.zbid,
                        keyno = tagetModel.zbid,
                        code = tagetModel.proitemno,
                        productno = tagetModel.productno,
                        seqno = 0,

                        proitemno = tagetModel.proitemno,
                        appqty = 1,
                        numb = 2,
                        lostqty = tagetModel.lostqty,
                        sheetsqty = 3,

                        prosheetsqty = 4,
                        needqty = tagetModel.needqty,
                        needsheetqty = 5,
                        outno = "a",
                        active_id = 6,

                        stock_id = 7,
                        userid = User.Idno,
                        inputdate = DateTime.Now,
                        sizelost = 6,
                        retqty = tagetModel.Waitretqty,
                        appid = 100
                    };
                    Entity.StotherOutlstProList.Add(outlist);
                }
                bindingSource.ResetBindings(false);
                var thread = new Thread(() =>
                {
                    gridView1.RefreshData();
                });
                thread.Start();  
            });
            IsOk = true;
        }

错误的意思是 不是在UI线程修改了这个控件 。

GetInstance_storeSelectChanged是注册事件回调函数 

报错的地方 

gridView1.RefreshData(); 我已经用线程里面就是一个委托 怎么还是这个 错误呢。 不明白

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4715/viewspace-3134263/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-29

  • 博文量
    181
  • 访问量
    1134