Hallo zusammen,
ich habe folgende Frage:
Ich nutze drei kamera.
Wenn ich Bilder gespeichert will, rufe ich die drei Methoden auf. Alles ganz einfach.
image1.Save(name der path)
image2.Save(name der path)
image3.Save(name der path)
Ich möchte aber die drei Methoden gleichzeitig aufrufen, um Zeit zu sparen.
hier ein Beispeil
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| pivate void btnSave(obejct sender, EventsArg e) { Task.Run(() => {Save_Image().Wait();}); }
private async Task Save_Image() { string path = Environment.ExpandEnvironmentVariables ($@"C:\Temp\Images\00000000_SVB_"); try { IEnumerable<Task> task = Enumerable.Range(0, 3). Select(i => Task.Run(async () => { if (i == 0) { await Image1(path + "0.bmp");
} else if (i == 1) { await Image2(path + "1.bmp");
} else if (i == 2) { await Image3(path + "2.bmp");
} })); await Task.WhenAll(task); } catch (Exception ex) { MessageBox.Show(ex.Message, ex.StackTrace); } Console.WriteLine($"############## Save_Image function. #####################"); } private async Task Image1(string path) { bool b = false; CurrentThread = Thread.CurrentThread; await Task.Run(() => { b = image1.SaveImage(path + ""); Console.WriteLine($"Image 1 saved: {b}. Thread : {CurrentThread.ManagedThreadId}"); }); }
private async Task Image2(string path) { bool b = false; CurrentThread = Thread.CurrentThread; await Task.Run(() => { b = image2.SaveImage(path); Console.WriteLine($"Image 2 saved: {b}. Thread: {CurrentThread.ManagedThreadId}"); }); }
private async Task Image3(string path) { bool b = false; CurrentThread = Thread.CurrentThread; await Task.Run(() => { b = image3.SaveImage(path); Console.WriteLine($"Image 3 saved: {b}. Thread : {CurrentThread.ManagedThreadId}"); }); } |
Synchron habe ich auch probiert.
Ich bekomme immer die selbe Ergebnisse.
Save ohne Thread. Wenn ich die drei Methode nach einander aufrufe, bekomme ich
~ 60 ms;
eine image.Save(); dauert ungefähr 20 ms;
Save mit threads erwarte ich eine Zeit ungefähr 20 ms.
Nach der Messung bekomme ich aber wieder 60 ms.
Hat jemand eine Ahnung woran liegt es und was mache ich falsch.
Danke