我试着制作一个可以自动按空间的程序。 但我只能启用它。程序崩溃后。
所以我不能把它关掉。请求帮助
这是我的代码:
using System.Windows.Forms;
namespace Auto_Abillty
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public bool startFlag = false;
public bool stopFlag = false;
private void Preiststop_Click(object sender, EventArgs e)
{
stopFlag = true;
}
private void Preist_Click(object sender, EventArgs e)
{
startFlag = true;
while (startFlag)
{
SendKeys.Send(" ");
Thread.Sleep(5000);
if (stopFlag)
startFlag = false;
}
}
}
}
答案 0 :(得分:0)
我建议使用System.Windows.Forms.Timer
,间隔为5000毫秒而不是你的方法。然后单击表单上的按钮,您可以启动或停止它。
另一种方法是将您的while
循环移动到另一个线程中,这将使UI线程仍然响应
答案 1 :(得分:0)
你也必须中止线程。
public bool x = false;
public bool j = false;
private void Preiststop_Click(object sender, EventArgs e)
{
j = true;
}
private void Preist_Click(object sender, EventArgs e)
{
x = true;
Thread newThread = new Thread(delegate ()
{
DoPriestWork();
});
newThread.Start();
//loop to wait for the response from DoPriestWork thread
while (x)
{
Thread.Sleep(5000);
if (j)
x = false;
}
newThread.Abort();
}
public void DoPriestWork()
{
//x = true;
//while (x == true)
//{
SendKeys.Send(" ");
//Thread.Sleep(5000);
// if (j == true)
// x = false;
//}
}
答案 2 :(得分:-1)
您的Preist_Click
调用阻止了UI:它在同一个线程中执行,而不是自己开始。
试试这个:
private bool keepRunning = true;
private void Preiststop_Click(object sender, EventArgs e)
{
keepRunning = false;
}
private async void Preist_Click(object sender, EventArgs e)
{
keepRunning = true;
await Task.Run(() => {
while (keepRunning)
{
SendKeys.Send(" ");
Thread.Sleep(5000);
}
});
}
答案 3 :(得分:-1)
似乎所有你需要的是一个线程,所以可以推动另一个按钮来改变“j”的条件。如果只有一个线程,则在该线程停止之前不会更新UI,因此需要创建另一个线程,如下例所示。
public Form1()
{
InitializeComponent();
}
public bool x = false;
public bool j = false;
private void Preiststop_Click(object sender, EventArgs e)
{
j = true;
}
private void Preist_Click(object sender, EventArgs e)
{
Thread newThread = new Thread(DoPriestWork);
newThread.Start();
}
public void DoPriestWork()
{
x = true;
while (x == true)
{
SendKeys.Send(" ");
Thread.Sleep(5000);
if (j == true)
x = false;
}
}