Parameteranzahlkonflikt nach Invoke c#

#1488057
Lesenswert?

Hallo,

ich folgenden Quelltext
1
private void m_Event_gotOutput(object sender, Args_Output args)
2
{
3
  if (m_textBoxOutput.InvokeRequired == true)
4
  {
5
    m_textBoxOutput.Invoke(new Evt_GotOutput(m_Event_gotOutput), args);
6
    return;
7
  }
8
  m_textBoxOutput.Text = args.output;
9
}

Der Aufruf geschieht aus einem Worker Thread heraus, darum Invoke. Nun 
wenn Invoke aufgerufen wird bekomme ich einen Parameterzahlkonflikt. 
Habe dieses Konstrukt schon oft verwendet aber noch nie diesen Fehler 
bekommen. Freue mich über Anregungen.

MFG

Florian
Gast #1488156
Lesenswert?

Hi,

der Zweite Parameter der Invoke-Methode verlangt die Argumente als 
Object-Array:

m_textBoxOutput.Invoke(new Evt_GotOutput(m_Event_gotOutput), 
Object[]{sender, args});

sollte eigentlich gehen (so aus dem Stegreif)

Oder schau in die MSDN - da gibts ganz brauchbare Beispiele zu den 
meisten Klassen und Funktionen!

schöne Grüße
schwaf
#1488213
Lesenswert?

Hallo,

danke für die Antwort. Ok das ist richtig der gepostete code war nur ein 
Versuch aber normalerweise packe ich das ganze in ein object-Array. Bei 
msdn hab ich schon geschaut, aber nix bruachbares für mein Problem 
gefunden. Ich weiß das es etwas mit den darunterliegenden Aufrufen in 
unmanaged code zu tun hat aber nicht was ich falsch mache oder warum es 
Auftritt. Wie gesagt ich verwende dieses Konstrukt schon länger....

Gruß
Gast #1488274
Lesenswert?

Hi,

Aus der MSDN:

args
Ein Array von Objekten, die als Argumente an die angegebene Methode 
übergeben werden sollen. Dieser Parameter kann NULL (Nothing in Visual 
Basic) sein, wenn die Methode keine Argumente annimmt.

Kann sein dass bei dir args bisher immer mit NULL belegt war?

Alternativ ist Invoke() überladen und nimmt auch nur 1 Argument an (den 
Delegaten).

Schwaf
#1488987
Lesenswert?

Hi,

Dein Problem ist, dass das "Evt_GotOutput" Delegate 2 Parameter verlangt 
(sender, args), du aber nur args mitgibst.

1
private void m_Event_gotOutput(object sender, Args_Output args)
2
{
3
  if (m_textBoxOutput.InvokeRequired == true)
4
  {
5
    m_textBoxOutput.Invoke(new Evt_GotOutput(m_Event_gotOutput), sender, args); //<---
6
    return;
7
  }
8
  m_textBoxOutput.Text = args.output;
9
}

Was das mit dem object[] angeht: das ist als params definiert, d.h. man 
kann die Parameter direkt mitgeben (unabhängig von der Anzahl)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren