我有以下代碼: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 構(gòu)建的基本形式。當(dāng)我單擊按鈕 1 時,它只會凍結(jié)軟件,而您無法單擊其他任何內(nèi)容。我已經(jīng)將其追溯到這一點 - 如果我注釋掉函數(shù)runBot = true內(nèi)部startsoftware,它將起作用,但是該行會導(dǎo)致凍結(jié)。我在這里遺漏了什么?
2 回答

慕桂英4014372
TA貢獻1871條經(jīng)驗 獲得超13個贊
Windows 窗體有一個 UI 線程。該線程負責(zé)更新 UI,并處理 UI 相關(guān)事件。如果此線程被阻塞,那么您的 UI 將變得無響應(yīng)。
計時器滴答事件由此 UI 線程處理,因此當(dāng)您在此事件處理程序中啟動一個長循環(huán)時,UI 線程無法處理 UI 的其余部分,并且您的程序似乎凍結(jié)了。
有幾種方法可以在您的代碼中解決此問題。您可能會刪除
while(runBot == true)
從您的計時器滴答事件中,讓計時器定期滴答。當(dāng)您不想processrunning
運行檢查時,您可以禁用計時器。如果您不希望用戶在此期間單擊某些內(nèi)容,您可以禁用按鈕。
另一種選擇是有一個后臺線程來相應(yīng)地調(diào)用processrunning
和設(shè)置一個標(biāo)志。

LEATH
TA貢獻1936條經(jīng)驗 獲得超7個贊
這部分代碼需要更改,否則您將永遠循環(huán):
while(runBot == true)
{
if(processrunning() == true)
{
}
}
也許在處理中將 runbot 設(shè)置為 false?
- 2 回答
- 0 關(guān)注
- 164 瀏覽
添加回答
舉報
0/150
提交
取消