【问题标题】:Multitasking in windows form in c# [duplicate]c#中Windows窗体中的多任务处理[重复]
【发布时间】:2013-03-07 03:52:30
【问题描述】:

在我的代码中......

List<Task> t;

private void Form1_Load(object sender, EventArgs e)
{
    t = new List<Task>();
    t.Add(Task.Factory.StartNew(() => Download()));
    t.Add(Task.Factory.StartNew(() => Display()));
}

现在在显示方法中,当我隐藏任何控件时,它会给我一个“跨线程异常”并告诉我它被主线程使用。

【问题讨论】:

  • display 方法的代码?
  • 关于“跨线程异常”的问题已经有数百个。在页面右上角的搜索框中输入或使用谷歌。

标签: c# multithreading winforms asynchronous


【解决方案1】:

很明显,Display 方法运行在与创建它的线程不同的线程上。

您只能从主线程更改 WinForm 控件。您需要检查控件上的 InvokeRequired 是否为 true,然后根据需要调用该方法。

更新任何关于控制的信息。

你可以试试这个方法:

if (this.InvokeRequired)
{
    this.Invoke((MethodInvoker)delegate { update the ui control here});
}

【讨论】:

    【解决方案2】:

    您必须在主线程上调用您的操作。您需要执行以下操作:

    Invoke((Action)(() => updateProgressBar()));
    

    这将在主 UI 线程上运行更新。

    【讨论】:

      猜你喜欢
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2018-03-26
      相关资源
      最近更新 更多