Laden...

[erledigt] += mit zusätzlichem Parameter

Erstellt von m.grauber vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.589 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren
[erledigt] += mit zusätzlichem Parameter

Hallo,

das abonieren des Events ist einfach:


worker.DoWork += new DoWorkEventHandler(worker_DoWork);

public static void worker_DoWork(object sender, DoWorkEventArgs e)
{
   ...
}

Nur wie kann ich worker_DoWork noch einen weiteren Parameter mit auf den Weg geben?

So geht das nicht:


worker.DoWork += new DoWorkEventHandler(worker_DoWork("Test"));

public static void worker_DoWork(object sender, DoWorkEventArgs e, String teststring)
{
   MessageBox.Show(teststring);
}

Geht das nur per externem Member?

PS: Google lässt nicht nach "+=" suchen. Auch nicht in Hochkommas eingeschlossen. Wie macht Ihr so etwas?

Grüße

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

U
400 Beiträge seit 2008
vor 13 Jahren

das hat nichts mit dem += sondern dem delegaten zu tun. Du könntest höchstens eine klasse vom worker ableiten und da das event mit dem von dir gewünschten delegaten überschreiben

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

mit += wird ein Delegat "verknüft" -> es ist also nur der Methodenname zulässig. Den Parameter kannst du dann im Methodenaufruf übergeben.

Bitte beachte auch [Hinweis] Wie poste ich richtig? Punkt 1.1.1

Google lässt nicht nach "+=" suchen. Auch nicht in Hochkommas eingeschlossen. Wie macht Ihr so etwas?

In der MSDN unter Ereignis schauen 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Gelöschter Account
vor 13 Jahren

so lässt sich dein vorhaben umsetzen:

    class Program
    {
        static void Main(string[] args)
        {
            test t = new test();
            t.testEvent += (a, b) => MyMethod(a, b, "test");
        }

        private static object MyMethod(object a, int b, string p)
        {
            return null;
        }
    }

    public class test
    {
        public event Action<object, int> testEvent;

        public void InvokeTestEvent(int arg2)
        {
            Action<object, int> handler = testEvent;
            if (handler != null) handler(this, arg2);
        }
    }
4.939 Beiträge seit 2008
vor 13 Jahren

Zur Übergabe von Parametern gibt es extra das Property 'DoWorkEventArgs.Argument' welches mittels


bgw.RunWorkerAsync("Test");

übergeben wird.
Einzige (kleiner) Nachteil ist, daß man das Objekt wieder in den konkreten Typ zurückcasten muß:


public void worker_DoWork(object sender, DoWorkEventArgs e)
{
  string sArgument = e.Argument as string;
  // ...
}

2.891 Beiträge seit 2004
vor 13 Jahren

Oder ganz einfach für das obige Beispiel:


worker.DoWork += delegate { MessageBox.Show("Test"); };

Gruß,
dN!3L

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo dN!3L,

ja das stimmt! 👍 Ich hatte dies auch schon versucht, bin jedoch auf ein weiteres Problem gestoßen. Das gehört jedoch in einen anderen Eintrag.

Vielen Dank und Grüße

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]