为了账号安全,请及时绑定邮箱和手机立即绑定

跨线程操作无效

跨线程操作无效

C#
至尊宝的传说 2019-09-13 11:06:13
跨线程操作无效好的,我知道为什么这会给我这个错误:跨线程操作无效:控制从其创建的线程以外的线程访问的“Form1”。但是......我怎样才能使这个可行?System.Threading.Thread t = new System.Threading.Thread(()=>{    // do really hard work and then...    listView1.Items.Add(lots of items);    lots more UI work});t.Start();我不关心Thread何时或如何完成,所以我并不关心任何花哨或过于复杂的atm,除非在新的Thread中使用UI时会更容易。
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

你不能。必须在拥有的线程上执行UI操作。期。

可以做的是在子线程上创建所有这些项目,然后调用Control.Invoke并在那里进行数据绑定。

或者使用 BackgroundWorker

    BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += (s, e) => { /* create items */ };
    bw.RunWorkerCompleted += (s, e) => { /* databind UI element*/ };

    bw.RunWorkerAsync();



查看完整回答
反对 回复 2019-09-16
?
RISEBY

TA贡献1856条经验 获得超5个赞

从另一个线程访问from的属性时,抛出此异常。要解决此问题,至少有两个选项。

  1. 告诉控制不要抛出这些异常(不推荐):

    Control.CheckForIllegalCrossThreadCalls = false;

  2. 使用线程安全函数:

    private void ThreadSafeFunction(int intVal, bool boolVal){
        if (this.InvokeRequired)
        {
            this.Invoke(
                new MethodInvoker(
                delegate() { ThreadSafeFunction(intVal, boolVal); }));
        }
        else
        {
            //use intval and boolval
        }}



查看完整回答
反对 回复 2019-09-16
  • 2 回答
  • 0 关注
  • 304 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信