// IDE-Voreinstellungen:
// Option Explicit On
// Option Strict On
// "My Project"-Einstellungen:
// Imports Microsoft.VisualBasic.ControlChars
// Imports System.Windows.Forms
// Imports System
using System;
using global::System.Windows.Forms;
namespace Pilz.Threading
{
///
/// Stellt Methoden bereit, mit denen ein beliebiger Methoden-Aufruf mit bis zu 3 Argumenten
/// in einen Nebenthread verlegt werden kann, bzw. aus einem Nebenthread in den Hauptthread
///
public class CrossThreadsInvokeing
{
public static void RunAsync(Action Action, T1 Arg1, T2 Arg2, T3 Arg3)
{
Action.BeginInvoke(Arg1, Arg2, Arg3, Action.EndInvoke, null);
}
public static void RunAsync(Action Action, T1 Arg1, T2 Arg2)
{
Action.BeginInvoke(Arg1, Arg2, Action.EndInvoke, null);
}
public static void RunAsync(Action Action, T1 Arg1)
{
Action.BeginInvoke(Arg1, Action.EndInvoke, null);
}
public static void RunAsync(Action Action)
{
Action.BeginInvoke(Action.EndInvoke, null);
}
private static bool GuiCrossInvoke(Delegate Action, params object[] Args)
{
var frms = Application.OpenForms;
if (frms.Count > 0 && frms[0].InvokeRequired)
{
frms[0].BeginInvoke(Action, Args);
return true;
}
return false;
}
public static void RunGui(Action Action, T1 Arg1, T2 Arg2, T3 Arg3)
{
if (!GuiCrossInvoke(Action, Arg1, Arg2, Arg3))
Action(Arg1, Arg2, Arg3);
}
public static void RunGui(Action Action, T1 Arg1, T2 Arg2)
{
if (!GuiCrossInvoke(Action, Arg1, Arg2))
Action(Arg1, Arg2);
}
public static void RunGui(Action Action, T1 Arg1)
{
if (!GuiCrossInvoke(Action, (object)Arg1))
Action(Arg1);
}
public static void RunGui(Action Action)
{
if (!GuiCrossInvoke(Action))
Action();
}
}
}