C#从另一个线程调用对象

C#从另一个线程调用对象,c#,multithreading,C#,Multithreading,我正在尝试编写一个小游戏,其中有一些障碍,你必须跳过,进入,等等。现在,为了能同时移动障碍物和跳跃,我打开了一个新的线程。其格式为1.cs: public partial class Form1 : Form { Worker workerObject; Thread workerThread; public Form1() { InitializeComponent(); workerObject = new Worker();

我正在尝试编写一个小游戏,其中有一些障碍,你必须跳过,进入,等等。现在,为了能同时移动障碍物和跳跃,我打开了一个新的线程。其格式为1.cs:

public partial class Form1 : Form
{
    Worker workerObject;
    Thread workerThread;
    public Form1()
    {
        InitializeComponent();
        workerObject = new Worker();
        workerObject.Form1 = this;
        workerObject.initialize(this);
        workerThread = new Thread(workerObject.DoWork);

    }
以及:

但我得到了以下错误:

错误1无法访问外部类型为“Game.Form1”的非静态成员 通过嵌套类型“Game.Form1.Worker”

然后,当我进入Form1.Designer.cs并将屏障设置为静态(顺便说一句,对象是可变的)时,我从上面的代码中得到11个错误,其中包含:

错误1成员“Game.Form1.picture\u barrier1”无法通过访问 实例引用;改为使用类型名称限定它


如何从另一个线程正确调用这些对象?

仅仅因为worker嵌套在Form类中,它不会继承Form类的isntance memeber…….在worker类中传递Form类的实例注意:尝试将线程与WinForm控件一起使用时会遇到痛苦的问题。。。你可能需要考虑计时器。特别是当委托和实例/静态方法让您感到困惑时。您的工人类中已经有form1 Form实例…..更改如下代码form1.picture\u barrier1.Left=form1.picture\u barrier1.Left-1;强烈建议不要修改designer.cs,它很容易搞乱UI控件shouldstop=true,不允许您访问工作线程上的UI属性。就像左边一样。你还没走到这一步,在你把腿打掉之前停下来。
public class Worker
{
    private volatile bool _shouldStop = false;
    public volatile Form Form1;
    public void initialize(Form pForm)
    {
        Form1 = pForm;
    }

    public void DoWork()
    {
        while (!_shouldStop)
        {
            _shouldStop = true;
            picture_barrier1.Left = picture_barrier1.Left - 1;
        }
    }

    public void RequestStop()
    {
        _shouldStop = true;
    }
}