mikrocontroller.net

Forum: PC-Programmierung Parameteranzahlkonflikt nach Invoke c#


Autor: Florian W. (flow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich folgenden Quelltext
private void m_Event_gotOutput(object sender, Args_Output args)
{
  if (m_textBoxOutput.InvokeRequired == true)
  {
    m_textBoxOutput.Invoke(new Evt_GotOutput(m_Event_gotOutput), args);
    return;
  }
  m_textBoxOutput.Text = args.output;
}

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

Autor: schwaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian W. (flow)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: schwaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian W. (flow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

denke das Problem liegt woanders...

Gruß

Autor: Chris ... (dechavue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

private void m_Event_gotOutput(object sender, Args_Output args)
{
  if (m_textBoxOutput.InvokeRequired == true)
  {
    m_textBoxOutput.Invoke(new Evt_GotOutput(m_Event_gotOutput), sender, args); //<---
    return;
  }
  m_textBoxOutput.Text = args.output;
}

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.