Für den Kontext: Ich möchte zur "gleichen Zeit" ein EMG und eine Kamera starten.Machen Sie einen Thread zu warten, bis die Schaltfläche geklickt wird
Es sieht wie folgt aus:
Public class EMG
{
public void startemg()
{
EMG emg = new EMG();
emg.Initialize(); //takes a lot of time
emg.Start();
[...]
}
}
Und dann fange ich an die Kamera und das EMG, wenn ich auf einen Knopf klicken:
private void button2_Click(object sender, EventArgs e)
{
Task t = new Task(EMG.startemg);
Task t1 = new Task(Camera.start)
t.Start();
t1.Start();
}
Mein großes Problem ist hier initialiazing die EMG nehmen ziemlich lange Zeit (einige Sekunden ...). Also gibt es eine große Lücke zwischen der Kamera und dem EMG Aufnahme-Start. Dann möchte ich die emg.Start()
& die Camera.start
zur "gleichen Zeit" starten.
Ich möchte nicht camera.start
auf meine EMG-Klasse setzen.
Ich habe versucht, emg.initialize
und emg.RecordStart
in zwei separate Lücke zu trennen, aber es ist unmöglich Es funktioniert nur, wenn sie beide in der gleichen Lücke mit EMG emg = new EMG();
sind.
Ich kann nicht‘legte einen await task.run
mit emg.start
Der beste Weg wäre, bevor EMG-Klasse zu starten, ist es einfach machen warten, bevor der emg.start
, bis ich auf den Button klicken. Lasse diesen Thread warten und starte ihn dynamisch mit der Schaltfläche.
Oder vielleicht machen t1
starten, wenn emg.initialize
fertig ist, wäre einfacher.
Vielen Dank.
genau die Art von Code, den ich danke müssen nicht getestet, aber arbeiten. Kleines Problem, obwohl es sagte "MAnualResetEvent enthält keinen Konstruktor, der 0 Argumente." ... weiß nicht, wie ich das beheben soll: s – jsls
Ich habe den Code aktualisiert – Michael
Sie sollten vielleicht auch in cancellationTokens schauen, um es wieder zu stoppen, falls die Schaltfläche nie geklickt wird? – Michael