Hallo,
ich habe eine Klasse
Habe mal folgendes Testprojekt gemacht:
Spoiler anzeigen
Mir sieht das nicht ganz richtig aus. Wie müsste ich async/await einsetzen? Brauche ich die vielleicht gar nicht? Dann hat die Process Klasse auch diverse Properties die alle im UI-Thread erstellt wurden. Auf diese wird nicht während des Ablaufs von Work() zugegriffen, sollte ich trotzdem besser ein Lock oder Ähnliches benutzen? Wie würde das Abbrechen des Tasks funktionieren, kann ich irgendwie ne CancellationFlag übergeben?
Grüße
ich habe eine Klasse
Process
mit der Methode Work()
. Von dieser Klasse habe ich nun x Instanzen in einer List<Process> und diese sollen nacheinander asynchron Work() abarbeiten. Es soll also erst Process[0].Work() ablaufen, dann Process[1].Work() etc. Es läuft also immer nur 1 Thread (naja einer für Process und einer für GUI). Zusätzlich muss ich den laufenden Thread abbrechen können und den Progress reporten. Da ich mit TAP noch nicht so klar komme, hatte ich gedacht ich frag mal nach Habe mal folgendes Testprojekt gemacht:
C#-Quellcode
- public partial class Form1 : Form
- {
- Task myTask;
- Process myTest = new Process();
- private void btnStart_Click(object sender, EventArgs e)
- {
- myTask = new Task(() => myTest.Work(new Progress<float>(ReportProgress)), TaskCreationOptions.LongRunning);
- myTask.Start();
- }
- private void ReportProgress(float progress)
- {
- BeginInvoke((Action)(() => label1.Text = progress.ToString()));
- }
- }
- public class Process
- {
- public void Work(IProgress<float> progressReport) // Mache lange andauerndes Zeugs (später so ca ein paar Stunden)
- {
- for (int i = 0; i <= 10; ++i)
- {
- Thread.Sleep(2000);
- progressReport.Report(i / 10.0f);
- }
- }
- }
Mir sieht das nicht ganz richtig aus. Wie müsste ich async/await einsetzen? Brauche ich die vielleicht gar nicht? Dann hat die Process Klasse auch diverse Properties die alle im UI-Thread erstellt wurden. Auf diese wird nicht während des Ablaufs von Work() zugegriffen, sollte ich trotzdem besser ein Lock oder Ähnliches benutzen? Wie würde das Abbrechen des Tasks funktionieren, kann ich irgendwie ne CancellationFlag übergeben?
Grüße