myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » ThreadPool Snippet
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

ThreadPool Snippet

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
ProGamer ProGamer ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-81.gif


Dabei seit: 22.09.2008
Beiträge: 447
Entwicklungsumgebung: C# && VB.NET(seltener)
Herkunft: NRW


ProGamer ist offline

ThreadPool Snippet

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Beschreibung:

Hallo zusammen!

Dieses Snippet dient dazu den Umgang mit Threading etwas zu vereinfachen.
Ich selbst habe in einigen Projekten immer wieder mal Methoden in einem Thread
ausführen müssen (Datenbank abfragen ist ein gutes beispiel) und danach kam die
Synchronisation mit dem GUI-Thread noch hinzu.

Bitte das ExceptionHandling nicht vergessen!

C#-Code:
public class csThreading
    {
        private static Dispatcher _disObject = Dispatcher.CurrentDispatcher;
        public static Dispatcher disObject
        {
            get { return _disObject; }
        }

        public static void QueueUserWorkItem( Action ThreadMethod )
        {
            ThreadPool.QueueUserWorkItem( x =>
            {
                try
                {
                    ThreadMethod();
                }
                catch ( Exception ex )
                {
                    //ToDo:
                    //ExceptionHandling!
                }
            } );
        }

        public static void QueueUserWorkItem<T>( Action<T> ThreadMethod, T MethodParam )
        {
            ThreadPool.QueueUserWorkItem( x =>
            {
                try
                {
                    ThreadMethod( MethodParam );
                }
                catch ( Exception ex )
                {
                    //ToDo:
                    //ExceptionHandling!
                }
            } );
        }

        public static void InvokeMethod( Action MethodToInvoke )
        {
            if ( !disObject.CheckAccess() )
            {
                disObject.BeginInvoke( new Action( MethodToInvoke ) );
            }
            else
            {
                MethodToInvoke();
            }
        }

        public static void InvokeMethod<T>( Action<T> MethodToInvoke, T MethodParam )
        {
            if ( !disObject.CheckAccess() )
            {
                disObject.BeginInvoke( new Action( () => MethodToInvoke( MethodParam ) ) );
            }
            else
            {
                MethodToInvoke( MethodParam );
            }
        }

    }

hier mal ein Beispiel wie es verwendet werden kann

C#-Code:
            public static void Execute()
            {
                csThreading.QueueUserWorkItem( ExecuteThread );
            }

            private static void ExecuteThread()
            {
                //Viel Code
                csThreading.InvokeMethod(RaiseExecuteCompletedEvent, new ExecuteCompletedEventArgs( "SomeResult" ) );
            }


            private void RaiseExecuteCompletedEvent(ExecuteCompletedEventArgs e)
            {
                if ( ExecuteCompletedEvent != null )
                {
                    ExecuteCompletedEvent( this, e );
                }
            }

            public event ExecuteCompletedEventHandler ExecuteCompletedEvent;

Schlagwörter: Threading Thread ThreadPool
12.04.2012 10:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.485
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo ProGamer,

auch wenn ich kein Fan des BackgroundWorkers bin, würde ich doch dafür plädieren, diesen zu benutzen, statt eine sehr ähnliche Funktionalität nachzuprogrammieren.

Der BackgroundWorkers bietet alles, was auch dein Snippet bietet. Darüber hinaus ermöglicht er es, das Exceptionhandling dem Aufrufer zu überlassen (RunWorkerCompletedEventArgs.Error) und damit in Abhängigkeit von der tatsächlich ausgeführten Methode zu reagieren. Das "//ToDo: ExceptionHandling!" wird damit einerseits dem Aufrufer überlassen (er muss sich also darum kümmern), anderseits auch ermöglicht (er kann sich also darum kümmern). Das ist sicher besser, als das Exceptionhandling pauschal in eine ansonsten allgemeinverwendbare Klasse einzubauen.

herbivore
12.04.2012 10:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 21.05.2013 17:19