c#线程,总是得到错误
本文关键字:错误 线程 | 更新日期: 2023-09-27 17:51:15
请帮我弄清楚这段代码:
using System.Windows.Forms;
using AionInterface;
using System.Threading;
namespace mover
{
public class MoveToCoord : IAionInterface
{
Thread tr;
Thread repeater;
public MoveToCoord()
{
tr = new Thread(LetsWork);
repeater = new Thread(Repeater);
}
public void Sleep(int ms)
{
Thread.Sleep(ms);
}
public void SetPosition(float x, float y, float z)
{
Game.Player.SetPosition(x, y, z);
}
public void OnClose()
{
return;
}
public void OnLoad()
{
//Game.Register("FindTarget", "f", KeysModifier.Control);
}
public void OnRun()
{
repeater.Start();
}
public void Repeater()
{
for (int i = 1; i < 5; i++)
{
tr.Start();
Thread.Sleep(6000);
}
}
public void LetsWork()
{
Thread.Sleep(1000);
SetPosition(1926, 1771, 163);
Thread.Sleep(1400);
SetPosition(1930, 1774, 163);
Thread.Sleep(1400);
}
public void CancelScript()
{
Game.Close();
}
}
}
我需要执行方法LetsWork 5次延迟6秒,不幸的是我不知道任何编程语言,仍然很难理解我线程是如何工作的。
如果你的目标是运行LetsWork 5次,延迟6秒,你不需要线程。如果你的目标是运行LetsWork 5次,5次同时6秒延迟,然后使用线程。
线程的基本前提是同时执行代码。您只需要GUI线程和一个工作线程来避免冻结。根据你的代码,你可以做同样的事情,但简化为只使用1个工作线程。作为一方不是你真的需要张贴你的错误,因为我不可能执行你的代码,我不知道如果下面的代码将修复错误是或否。它只是解决了一个设计问题。
using System.Windows.Forms;
using AionInterface;
using System.Threading;
namespace mover
{
public class MoveToCoord : IAionInterface
{
Thread tr;
public MoveToCoord()
{
tr = new Thread(LetsWork);
}
public void Sleep(int ms)
{
Thread.Sleep(ms);
}
public void SetPosition(float x, float y, float z)
{
Game.Player.SetPosition(x, y, z);
}
public void OnClose()
{
return;
}
public void OnLoad()
{
//Game.Register("FindTarget", "f", KeysModifier.Control);
}
public void OnRun()
{
tr.Start();
}
public void LetsWork()
{
for (int i=0;i<6;++i){
Thread.Sleep(1000);
SetPosition(1926, 1771, 163);
Thread.Sleep(1400);
SetPosition(1930, 1774, 163);
Thread.Sleep(1400);
Thread.Sleep(6000);
}
}
public void CancelScript()
{
Game.Close();
}
}
}