Benutzer mit den meisten Antworten
Invoke - Funktionen

Frage
-
Hallo,
die Invoke ist ja mächtig, für Werte, wie string, double, relativ einfach anzuwenden.
Wie sieht so was bei Funktionen aus?Also das
cbWidth.Items.Insert(0, Settings.Default.DefaultValueWidth);
Grüße Andreaspublic void SetWithList(List<double> doubleList) { cbWidth.Invoke(new Action<List<double>> (s => { cbWidth.DataSource = s; }), doubleList); // cbWidth.Refresh(); // Set or add the default value if not exist. var qry = (from p in doubleList orderby p where p == Settings.Default.DefaultValueWidth select p).FirstOrDefault(); if (qry != null) { // cbWidth.SelectedItem = qry; cbWidth.Invoke(new Action<double> (s1 => { cbWidth.SelectedItem = s1; }), qry); } else { cbWidth.Items.Insert(0, Settings.Default.DefaultValueWidth); cbWidth.Invoke(new Action<int, object> (s2 => { cbWidth.Items.Insert = s2; }), 0, Settings.Default.DefaultValueWidth); } // int z = qry.CompareTo(Settings.Default.DefaultValueWidth); }
Antworten
-
Hi Andreas,
mit Lambdafunktionen kannst du alles damit machen, einfach eine Action wie eine Mehode Deklarieren.
Control.Invoke(() => {//Mache hier was };
Grüße
- Als Antwort markiert Andreas Bauer2 Montag, 28. März 2011 18:44
-
Hallo Andreas,
Dein Beispiel-Code geht da etwas durcheinander und es fehlen auch Klassen-Deklarationen, aber ich glaube ich weiss, was Du meinst:
cbWidth.Items.Insert(0, Settings.Default.DefaultValueWidth); cbWidth.Invoke(new Action<int, object>((s2, obj) => { cbWidth.Items[0] = obj; }), 0, 123); var ret = cbWidth.Invoke(new Func<int, object>((index) => { return cbWidth.Items[index]; }), 0);
Die unteren Codezeilen geben einen Wert zurück, was dem Begriff "Funktion" nahe kommt (in C#.NET sagt man allerdings doch eher "Methoden").
Ansonsten marshallt Invoke mit Func genauso zuverlässig in den Steuerelement-Thread, wie mit Action, wenn gesichert ist, dass kein anderer Thread die Rückgabevariable (gleichzeitig) setzt.
ciao Frank- Als Antwort markiert Andreas Bauer2 Montag, 28. März 2011 18:44
Alle Antworten
-
Hi Andreas,
mit Lambdafunktionen kannst du alles damit machen, einfach eine Action wie eine Mehode Deklarieren.
Control.Invoke(() => {//Mache hier was };
Grüße
- Als Antwort markiert Andreas Bauer2 Montag, 28. März 2011 18:44
-
Hallo Andreas,
Dein Beispiel-Code geht da etwas durcheinander und es fehlen auch Klassen-Deklarationen, aber ich glaube ich weiss, was Du meinst:
cbWidth.Items.Insert(0, Settings.Default.DefaultValueWidth); cbWidth.Invoke(new Action<int, object>((s2, obj) => { cbWidth.Items[0] = obj; }), 0, 123); var ret = cbWidth.Invoke(new Func<int, object>((index) => { return cbWidth.Items[index]; }), 0);
Die unteren Codezeilen geben einen Wert zurück, was dem Begriff "Funktion" nahe kommt (in C#.NET sagt man allerdings doch eher "Methoden").
Ansonsten marshallt Invoke mit Func genauso zuverlässig in den Steuerelement-Thread, wie mit Action, wenn gesichert ist, dass kein anderer Thread die Rückgabevariable (gleichzeitig) setzt.
ciao Frank- Als Antwort markiert Andreas Bauer2 Montag, 28. März 2011 18:44
-
Hallo,
alles korrekt erkannt. Ja mein Code ging ja nicht.
cbWidth.Items.Insert(0, Settings.Default.DefaultValueWidth);
Der Index, der Wert hat mich irritiert. Ich wollte halt das Insert in die Action Methode irgendwie bringen.
cbWidth.Items.Insert(0, Settings.Default.DefaultValueWidth);
Das muss jetzt schon weglassen und über den Index, updaten. Sehe ich richtig?
Danke an beide.
Andreas
-