當表單被加載時myMethod()
被調用,然後它執行一些語句。在它到達if語句的某一時刻,它應該停止並等待用戶按下某個按鈕,然後根據用戶的操作繼續執行。我使用Thread.Sleep()
和ManualResetEvent obj的WaitOne()
方法,但它們似乎凍結了整個過程,直到時間到期才能完成任何操作。我認爲KeyEventHandler應該在後臺運行,所以它永遠不會受到影響......無論如何,我該怎麼做?等待用戶響應
public partial class Form1 : Form
{
bool pressed = false;
public Form1()
{
InitializeComponent();
this.KeyPreview = true;
this.KeyDown +=new KeyEventHandler(Form1_KeyDown);
}
void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.E)
{
pressed = true;
}
}
void myMethod()
{
while (someBool)
{
//do something
if (pressed)
//do this
else
//do that
}
}
private void Form1_Load(object sender, EventArgs e)
{
myMethod();
}
}
也許你想在單獨的線程上運行'myMethod()',或者你想重新考慮你的設計。爲什麼不把「myMethod()」的相關部分放在按鍵事件處理程序中? – neeKo
如果我把myMethod()的一部分放在按鍵事件處理程序用戶需要時間按下右鍵?但是當myMethod被執行時,程序不能捕獲被按下的鍵,除非它在不同的線程上被執行 –
把myMethod的第一部分('//做某事')放到'Form_Load'中,放第二部分('//做這個')在'if(e.KeyCode == Keys.E)'中,把第三部分('// do that')放到'else'中。 – neeKo