Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
交叉线程异常:如何在C#中从一个线程修改另一个线程?_C#_Multithreading - Fatal编程技术网

交叉线程异常:如何在C#中从一个线程修改另一个线程?

交叉线程异常:如何在C#中从一个线程修改另一个线程?,c#,multithreading,C#,Multithreading,我有一个多线程表单加载器,我正在尝试从一个线程修改另一个线程: private void Form1_Load(object sender, EventArgs e) { button4.Enabled = false; progressBar1.Style = ProgressBarStyle.Marquee; progressBar1.MarqueeAnimationSpeed = 0; progressBar1

我有一个多线程表单加载器,我正在尝试从一个线程修改另一个线程:

    private void Form1_Load(object sender, EventArgs e)
    {
        button4.Enabled = false;
        progressBar1.Style = ProgressBarStyle.Marquee;
        progressBar1.MarqueeAnimationSpeed = 0;
        progressBar1.Value = 1;

        new Thread(new ThreadStart(CompareVersions)).Start();
    }
如何设置在新线程中启动的
CompareVersion
,他必须在上一个线程中设置
progressBar1.MarqueeAnimationSpeed=1
启动字幕动画

步骤:

  • 在新线程上启动方法
  • MarqueeAnimationSpeed
    从新线程更新为1到线程(1)

  • Visual Studio警告我,我无法从新线程修改现有线程。

    您可以将其定义为新方法或类,并调用它,在启动新线程之前,只需将MarqueeAnimationSpeed设置为1;最后,捕捉线程出口并重新设置MarqueeAnimationSpeed=0

    我不明白你的问题。请澄清问题。你试过什么吗?@SriramSakthivel我想Simon在尝试时遇到了crossThreadException:progressBar1.MarqueeAnimationSpeed=1你是否尝试从另一个线程更新UI?这将不起作用,您必须封送访问或使用后台工作程序来引发已封送的事件。这并不是浪费,因为您不能直接与您创建的新线程交互,请在线程启动前设置该“标志”,并在线程关闭时重设为0。小把戏:)