我有一個程序,當它變成綠色時,它會根據按鈕上點擊按鈕的速度來檢查用戶反應時間。我希望點擊按鈕後在後臺運行的功能。如何在後臺執行按鈕運行操作
我雖然通過使用任務它會使它異步,但它似乎並非如此。我知道有一個等待,可能我應該讓它返回到它被稱爲的地方,但我有一個問題找到解決方案。
到目前爲止我的代碼看起來像這樣
public partial class Reaction : Form
{
Stopwatch timer;
bool start = false;
public Reaction()
{
InitializeComponent();
button1.Text = "START";
button1.BackColor = Color.Red;
}
public async Task Test()
{
if (start)
{
timer.Stop();
TimeSpan timespan = timer.Elapsed;
string timeString = String.Format("{0:00}:{1:00}:{2:00}", timespan.Minutes, timespan.Seconds, timespan.Milliseconds/10);
MessageBox.Show(timeString);
button1.BackColor = Color.Red;
button1.Text = "START";
start = false;
}
else
{
Random rnd = new Random();
int number = rnd.Next(1, 10000);
System.Threading.Thread.Sleep(3000 + number);
timer = Stopwatch.StartNew();
button1.BackColor = Color.Green;
button1.Text = "CLICK";
start = true;
}
}
private async void button1_Click(object sender, EventArgs e)
{
button1.BackColor = Color.Red;
button1.Text = "Dont click";
await Test();
}
}
爲什麼不要在新線程中運行「背景」代碼像這樣: 線程T =新線程(測試); T.start(); – Taco2
您應該使用Task.Delay(1000);而不是Thread 。睡眠 –
Usin g Task.Delay(1000);並不能解決問題。這只是等待「等待」 – Taco2