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 )
{
}
} );
}
public static void QueueUserWorkItem<T>( Action<T> ThreadMethod, T MethodParam )
{
ThreadPool.QueueUserWorkItem( x =>
{
try
{
ThreadMethod( MethodParam );
}
catch ( Exception ex )
{
}
} );
}
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()
{
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