【问题标题】:Pass mehod to task from Form1 class将方法从 Form1 类传递给任务
【发布时间】:2015-05-09 09:53:59
【问题描述】:

我有一个程序将方法及其参数从 Form1 类(Windows Form-UI)发送到另一个任务。

我写道:

private void Activate_Click(object sender, EventArgs e)
{
     Task task = new Task(() => mng.start(switchAB.Text, switchC.Text, switchDE.Text, switchF.Text, switchG.Text, switchH.Text,textBox1.Text));
     task.Start();
}

但我有错误:

用户代码未处理无效操作异常 -

跨线程操作无效:控件“switchAB”从创建它的线程以外的线程访问。

mng.start 是在管理类中获取此参数的方法。

我该如何解决?

【问题讨论】:

    标签: c# multithreading winforms


    【解决方案1】:

    我认为这个错误会告诉你你需要知道的每一件事。您不能从创建它的线程以外的线程访问 UI 元素。因此,当您在任务中访问 switchAB.Text 时,您违反了此规则。

    诀窍是在 UI 线程上获取文本,然后将其作为文本传递给任务。

    试试这个:

    private void Activate_Click(object sender, EventArgs e)
    {
        var sab = switchAB.Text;
        var sc = switchC.Text;
        var sde = switchDE.Text;
        var sf = switchF.Text;
        var sg = switchG.Text;
        var sh = switchH.Text;
        var tb1 = textBox1.Text;
        Task task = new Task(() => mng.start(sab, sc, sde, sf, sg, sh, tb1));
        task.Start();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2021-10-17
      相关资源
      最近更新 更多