【发布时间】:2018-11-28 18:09:12
【问题描述】:
我有以下代码:
public partial class Form1 : Form
{
// our config
public bool runBot, afkModeToggle, shutdownPcToggle = false;
public int roundsToPlay, minsToPlay, waitInLobbyFor, waitInDeathScreenFor;
public void addToLogs(string logmsg)
{
richTextBox1.AppendText("\r\n" + logmsg);
richTextBox1.ScrollToCaret();
}
public void startsoftware()
{
runBot = true;
addToLogs("[" + DateTime.Now + "] Bot has started");
label22.Text = " RUNNING" + runBot;
label22.ForeColor = System.Drawing.Color.DarkGreen;
}
public void pausesoftware()
{
runBot = false;
addToLogs("[" + DateTime.Now + "] Bot has been paused");
label22.Text = " PAUSED" + runBot;
label22.ForeColor = System.Drawing.Color.Crimson;
if (checkBox3.Checked)
{
Process.Start("shutdown", "/s /t 0");
}
}
public bool processrunning()
{
Process[] pname = Process.GetProcessesByName("notepad");
if (pname.Length == 0)
{
label23.Text = "process Not Found";
label23.ForeColor = System.Drawing.Color.Crimson;
return false;
}
else
{
label23.Text = "process Found";
label23.ForeColor = System.Drawing.Color.DarkGreen;
return true;
}
}
//
// form follows
//
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
while(runBot == true)
{
if(processrunning() == true)
{
}
}
}
private void button1_Click(object sender, EventArgs e)
{
startsoftware();
}
private void button2_Click(object sender, EventArgs e)
{
pausesoftware();
}
}
它是通过 Visual Studio 构建的基本表单。当我单击按钮 1 时,它只会冻结软件,而您无法单击其他任何内容。我已经将其追溯到这一点 - 如果我在 startsoftware 函数中注释掉 runBot = true ,它将起作用,但是该行会导致冻结。
我错过了什么吗?
【问题讨论】:
-
runBot在哪里使用?它是否在另一个线程上使用? -
你需要发布所有相关代码,看看如何创建minimal reproducible example
-
我觉得还有更多。表单上是否有任何控件“侦听”要更改的 botRun 值?
-
人们要求更多信息的原因是您发布的代码可以正常工作,因此问题一定出在其他地方。您需要单步执行您的代码并查看它挂在哪里(在分配上设置断点,然后使用 F10/F11 单步执行代码)。至少,在 Visual Studio 挂起时按下“暂停”按钮,以便查看正在执行的行。
-
不要在计时器滴答声中添加循环。
runBot应该只是计时器上的Enabled属性。
标签: c# class properties freeze