Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 2
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Invoke Beispiel mittels Erweiterungs Methoden.


Autor: Sperneder Patrick
Sprache: C#
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 25298
  
Kick it on dotnet-kicks.de  

Beschreibung:

Wer kennt es nicht ..
Das lästige ausführen eines Delegaten bestimmten Typs um Daten aus einem anderen thread auf einem Windows.Form anzeigen zu können, ohne mit einer Ausnahme beworfen zu werden.
Das .NET Framework ab Version 3 bietet sogenannte extension methods an, die sich für so eine Aufgabe geradezu anbieten.
Im Prinzip liesse sich diese Klasse auf jeden erdenklichen Datentyp erweitern.
Ich habe drei Beispieltypen verwendet um das Prinzip darzustellen.
(Es wird natürlich immer ein Verweis auf das Windows.Form gebraucht um das Invoke entsprechend auszuführen.)
Dies ist mein Beitrag zum Snippet Contest.
Grüsse Patrick


Abgelegt unter: thread, invoke, multi threading, extension.



C#
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System;
using System.Windows.Forms;

namespace FX3Goodies.ExtensionMethods
{
    public static class Extensions
    {

        /// <summary>
        /// Delegate um strings zu invoken.
        /// </summary>
        public delegate string StringInvoker(string toInvoke, Form Invoker);
        /// <summary>
        /// Delegate um Integer Werte zu invoken.
        /// </summary>
        public delegate int  IntegerInvoker(int toInvoke, Form Invoker);
        /// <summary>
        /// Delegate um Double Werte zu invoken.
        /// </summary>
        public delegate double DoubleInvoker(double toInvoke, Form Invoker);

        
        /// <summary>
        /// Invokes the this string. Extension-method with params.
        /// </summary>
        /// <param name="stringToInvoke">The string to invoke.</param>
        /// <param name="theInvokingForm">The invoking form.</param>
        /// <returns></returns>
        /// Documented at : 20.08.2008 ,  10:56
        /// done by : Noodles
        /// on workstation : UNI-2
        /// compiled for processor architecture : x86
        /// processor id : x86 Family 15 Model 79 Stepping 2, AuthenticAMD
        /// number of processors : 1
        /// operating system : Windows_NT
        /// (C) 2008 Sperneder Patrick , Gert H. Burgstaller
        /// http://www.psi-labs.at/development/noodles
        public static string InvokeThisString(this string stringToInvoke, Form theInvokingForm)
        {
            if (theInvokingForm.InvokeRequired)
            {
                theInvokingForm.Invoke(new StringInvoker(InvokeThisString), new Object[] { stringToInvoke, theInvokingForm });
            }

            return stringToInvoke;
        }

        /// <summary>
        /// Invokes the this integer. Extension-method with params.
        /// </summary>
        /// <param name="integerToInvoke">The integer to invoke.</param>
        /// <param name="theInvokingForm">The invoking form.</param>
        /// <returns></returns>
        /// Documented at : 20.08.2008 ,  10:56
        /// done by : Noodles
        /// on workstation : UNI-2
        /// compiled for processor architecture : x86
        /// processor id : x86 Family 15 Model 79 Stepping 2, AuthenticAMD
        /// number of processors : 1
        /// operating system : Windows_NT
        /// (C) 2008 Sperneder Patrick , Gert H. Burgstaller
        /// http://www.psi-labs.at/development/noodles
        public static int InvokeThisInteger(this int integerToInvoke, Form theInvokingForm)
        {
            if (theInvokingForm.InvokeRequired)
            {
                theInvokingForm.Invoke(new IntegerInvoker(InvokeThisInteger), new Object[] { integerToInvoke , theInvokingForm });
            }

            return integerToInvoke ;
        }

        /// <summary>
        /// Invokes this double. Extension-method with params.
        /// </summary>
        /// <param name="doubleToInvoke">The double to invoke.</param>
        /// <param name="theInvokingForm">The invoking form.</param>
        /// <returns></returns>
        /// Documented at : 20.08.2008 ,  11:00
        /// done by : Noodles
        /// on workstation : UNI-2
        /// compiled for processor architecture : x86
        /// processor id : x86 Family 15 Model 79 Stepping 2, AuthenticAMD
        /// number of processors : 1
        /// operating system : Windows_NT
        /// (C) 2008 Sperneder Patrick , Gert H. Burgstaller
        /// http://www.psi-labs.at/development/noodles
        public static double InvokeThisDouble(this double doubleToInvoke, Form theInvokingForm)
        {
            if (theInvokingForm.InvokeRequired)
            {
                theInvokingForm.Invoke(new DoubleInvoker(InvokeThisDouble), new Object[] { doubleToInvoke, theInvokingForm });
            }
            return doubleToInvoke;
        }
    
    }
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Jens Schneeweiß schrieb am:  21.01.2009 16:18:32

Bitte mal ein Beispiel angeben, wie man damit am besten umgehen soll?
Rainer Hilmer schrieb am:  21.01.2009 20:06:31

Wie immer, wenn es um dieses Thema geht, verweise ich auf mein Lieblings-Snippet (ist nicht von mir):
http://dotnet-snippets.de/dns/threadsicheres-zuweisen-von-control-eigenschaften-SID829.aspx


Diese Snippets könnten für Sie interessant sein:
[C#] Aktuelles Verzeichnis auslesen
[C#] Asynchrones nachladen von Bildern in DataGridView
[C#] Threadsichere GUI Änderungen
[C#] Threadsichere und generische Kommunikation Windows Forms
[C#] Events aus Worker-Thread im GUI-Thread werfen! Kein Invoke!
[C#] Thread nach Timeout beenden
[VB.NET] CPU Last von mehreren CPUs überwachen
[C#] CPU Last von mehreren CPUs überwachen
[C#] Methode mit Parameter in eigenem Thread starten
[C#] Threadsicherer Codeaufruf im Control-Kontext (Invoking)
[C#] Die Ausführungszeit einer Methode einschränken
[VB.NET] Hängende Processe beenden
[C#] Parallelisierung von Schleifen
[C#] Threadsicheres Zuweisen von Control-Eigenschaften
[C#] Control aus anderen Threads aktualisieren
[C#] CallAndWait
[C#] Generischer Invoker für Windows Form Controls
[C#] DelayedEventHandler
[C#] Datei/Ordner durch Erweiterungsmethoden abfragen
[C#] Programmpfad mittels Erweiterung ermitteln
[C#] DateTime Extensions liefern TimeStamp
[C#] Komplette Exception Message (inkl. InnerExceptions) ausgeben
[VB.NET] Programmpfad mittels Erweiterung ermitteln in VB
[C#] LINQ-Erweiterung für eindeutige Liste
[C#] Type Color serialisieren und deserialisieren
[C#] Controls gleichen Typs von einem Container in Winform holen
[C#] Extension in einem Dateinamen/Pfad ändern
[C#] Selektieren eines gekapselten Eintrags aus der ComboBox
[C#] Color Extension-Methods
[C#] IsNull and IsNullOrEmpty Extension-Methods become Lazy
[C#] Enum-Extension - Flag in einem Bitfeld gesetzt?
[C#] Anzahl der Monate zwischen 2 DateTime-Objekten (Extension)
[C#] "for" mal anders
[C#] Generische Event Args -> EventArgs
[C#] Lazy Serialization-Extensions including Compression
[C#] SystemIconsImageListWrapper

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.