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