【发布时间】:2021-06-01 07:55:26
【问题描述】:
我在 C# VIsual Studio 2019 中创建了一个简单的自动点击器,当我打开它然后用右上角的红色 X 关闭它时,它仍然在后台(我可以在任务管理器中看到它)。 我试图用代码制作一个按钮:
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
但它仍然不起作用。有什么帮助吗?
这里是完整的代码:
public partial class Form1 : Form
{
[DllImport("user32.dll")]
static extern short GetAsyncKeyState(Keys vKey);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
private const int LEFTUP = 0x0004;
private const int LEFTDOWN = 0x0002;
public int intervals = 100;
public bool Click = false;
public int parsedValue;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;
Thread AC = new Thread(AutoClick);
backgroundWorker1.RunWorkerAsync();
AC.Start();
}
private void AutoClick()
{
while (true)
{
if(Click == true)
{
mouse_event(dwFlags: LEFTUP, dx: 0, dy: 0, cButtons: 0, dwExtraInfo: 0);
Thread.Sleep(1);
mouse_event(dwFlags: LEFTDOWN, dx: 0, dy: 0, cButtons: 0, dwExtraInfo: 0);
Thread.Sleep(intervals);
}
Thread.Sleep(2);
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
if (checkBox1.Checked)
{
if(GetAsyncKeyState(Keys.Down)< 0)
{
Click = false;
}
else if(GetAsyncKeyState(Keys.Up)< 0)
{
Click = true;
}
Thread.Sleep(1);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
if(!int.TryParse(textBox1.Text, out parsedValue))
{
MessageBox.Show("Enter a number");
return;
}
else
{
intervals = int.Parse(textBox1.Text);
}
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
【问题讨论】:
-
在关闭应用程序之前停止任何长时间运行的任务。您有哪些长期运行的任务?
-
这能回答你的问题吗? Application.Exit
-
这意味着您正在做一些事情来停止 Windows 消息泵,这意味着应用程序无法处理退出事件
-
我的猜测是你有一段时间(真的)在某个地方让所有东西都活着
-
CheckForIllegalCrossThreadCalls = false;你不应该这样做。见Is it safe just to set CheckForIllegalCrossThreadCalls to false to avoid cross threading errors during debugging?
标签: c#