Forum: PC-Programmierung Parameteranzahlkonflikt nach Invoke c#


von Florian W. (flow)


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

von schwaf (Gast)


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

von Florian W. (flow)


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ß

von schwaf (Gast)


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

von Florian W. (flow)


Lesenswert?

Hi,

ist nicht null und ich brauch die parameter eben weil ich parameter 
übergeben muss.. bzw. will.

denke das Problem liegt woanders...

Gruß

von Chris .. (dechavue)


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)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.