Ich habe ein Programm, das prüft, was die Benutzerreaktionszeit ist, basierend auf der Geschwindigkeit, die er auf die Schaltfläche klickt, wenn es grün wechselt. Ich möchte die Funktion, die nach dem Klicken der Schaltfläche funktioniert, im Hintergrund ausführen.Wie man Knopfbetrieb im Hintergrund macht
Ich habe zwar mit Task, es wird es asynchron machen, aber es scheint nicht der Fall zu sein. Ich verstehe, dass es ein Warten gibt und wahrscheinlich sollte ich es irgendwie dorthin zurückbringen, wo es hieß, aber ich habe ein Problem, die Lösung zu finden.
Mein Code so sieht weit wie diese
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();
}
}
Warum führen Sie nicht den "Hintergrund" Code in einem neuen Thread? So: Thread T = neuer Thread (Test); T.start(); – Taco2
sollten Sie Task.Delay (1000); statt Thread .Schlaf –
Usin g Aufgabe.Delay (1000); löst das Problem nicht. Es ist nur noch ein Warten auf "Warten" – Taco2