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: 193
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)

Events aus Worker-Thread im GUI-Thread werfen! Kein Invoke!


Autor: Christian Hunke
Sprache: C#
Bewertung: 9
(1 Bewertung)
Anzahl der Aufrufe: 27521
  
Kick it on dotnet-kicks.de  

Beschreibung:

Zeigt die Verwendung von AsyncOperation um Events aus einem Worker-Thread im GUI-Thread zu werfen. Somit fällt für jeglichen Code in den Event-Handlern in Bezug auf Control.Invoke() weg.

Abgelegt unter: events, event, asyncoperation, worker, thread, threads, eventhandler, control, invoke, gui.



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
public partial class Form1 : Form
{
    public event EventHandler Tested;

    public Form1()
    {
        InitializeComponent();

        Tested += new EventHandler(Form1_Tested);
    }

    private void Form1_Tested(object sender, EventArgs e)
    {
        Text = "Test";
    }

    private void Form1_Shown(object sender, EventArgs e)
    {
        #region Test 1
        // Works normal in GUI-Thread directly
        Form1_Tested(this, EventArgs.Empty);
        #endregion

        #region Test 2
        // Works in worker thread and throws GUI exception 
        // because of foreign thread access
        new Thread(new ThreadStart(delegate()
            {
                OnTested(EventArgs.Empty);
            })).Start();
        #endregion

        #region Test 3
        // Works in worker thread and returns to GUI-Thread
        // to throw the event, so no need in eventhandler 
        // to use Control.Invoke();
        AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(null);
        new Thread(new ThreadStart(delegate()
            {
                asyncOp.Post(new SendOrPostCallback(delegate(object obj)
                    {
                        OnTested(EventArgs.Empty);
                    }), null);
            })).Start();
        #endregion
    }

    protected virtual void OnTested(EventArgs e)
    {
        EventHandler tmpHandler = Tested;
        if (tmpHandler != null)
            tmpHandler(this, e);
    }
}
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.)



Diese Snippets könnten für Sie interessant sein:
[C#] EventFilter
[C#] DelayedEventHandler
[C#] WatchedList
[C#] Delegate (Events)
[C#] Event über Property verfügbar machen
[C#] Read-Write-Property mit Events
[C#] Anzahl der EventHandler eines Events bestimmen
[C#] Event
[C#] Eventlog - Ereignisbehandlung
[C#] RoutedEvent erstellen
[C#] Event to Observable (Rx)
[C#] Aktuelles Verzeichnis auslesen
[C#] Invoke Beispiel mittels Erweiterungs Methoden.
[C#] Asynchrones nachladen von Bildern in DataGridView
[C#] Threadsichere GUI Änderungen
[C#] Threadsichere und generische Kommunikation Windows Forms
[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
[VB.NET] Multithreading, Variable für 2 Threads, Lock Beispiel
[ASP.net] AddHandler bei einen Dynamisch Control
[C#] MenuItem DropDownItem Click Event hinzufügen
[C#] Doppelbufferung für Steuerelemente aktivieren
[C#] Transparenter Hintergrund beim Steuerelement
[C#] CursorChanger
[ASP.net] NullReferenceException
[VB.NET] ControlResize wie in der IDE auch zur Laufzeit
[C#] Generischer Invoker für Windows Form Controls
[ASP.net] Formularelement fokusieren auf Ajax Seiten
[C#] Controls gleichen Typs von einem Container in Winform holen
[C#] Eigenschaften aller Steuerlemente eines Formulars setzen
[VB.NET] Alle Textboxen zurücksetzen
[ASP.net] bestimmtes Control auf der aspx-Seite finden
[VB.NET] Oft benötigte Properties von Controls schnell zentral ausfüh
[VB.NET] Das Klick-Event von Controls gemeinsam auffangen und zentral
[VB.NET] Linien u. Kreise a la VB6 - Einfach Zeichnen
[C#] iTunes-ProgressBar
[C#] WaterBox
[VB.NET] Alle Controls einer Form Enablen/Disablen
[C#] Löschen aller TextControls auf einer Form in C#
[VB.NET] Control Resize wie in der IDE auch zur Laufzeit - Extended
[VB.NET] List all controls by using the name of the controls
[C#] Custom Toolstrip Renderer
[C#] Prüfen ob in einem Verzeichnis Schreibrechte verfügbar sind!
[C#] Hochwertige (optisch ansprechende) WPF - Buttons
[C#] WPF - Buttons "OK/Cancel" - endlich unverwechselbar -
[C#] Visuelles Feedback fokussierter Text Boxen
[C#] Darstellung eines ASP.NET Steuerelementes als HTML-String
[C#] Maus Sanduhr zeigen wenn Methode ausgeführt wird
[C#] TextBlock animiert ein- und ausblenden

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