2017-06-02 5 views
1

in der gleichen Klasse, ich habe:Objektverweis für nicht statisches Feld erforderlich, um innerhalb derselben Klasse

public partial class MainWindow : Window { 
// event handler 
private static void messageReceived (object sender, messageReceivedEvent args) 
{ 
    //some code 
    stopProcesses() 
} 
void stopProcesses() 
{ 
    //some code 
} 
} 

In den Event-Handler, der Anruf an stopProcesses() im Titel die Fehler geben: eine Objektreferenz ist erforderlich für das nicht statische Feld, die Methode oder die Eigenschaft 'MainWindow.stopProcesses'. Sie sind in der gleichen Klasse und ich kann stopProcesses nicht als statisch haben, weil ich jede Variable und jede Methode haben müsste, wenn die Klasse statisch wäre und das ist nicht der Punkt. Ich weiß nicht, wie ich die nicht statische Methode von einem statischen Ereignishandler aufrufen kann, was ist ein Objektreferenz auf die Methode?

+3

Warum können Sie 'messageReceived' auch nicht zu einer Instanzmethode machen? – Jamiec

+0

Benötigen Sie wirklich das 'messageReceived', um statisch zu sein? Machen Sie es zu einer Instanzmethode (d. H. Entfernen Sie "statisch") und der Fehler wird verschwinden. –

Antwort

3

Die beste Lösung ist messageReceived Instanzbereich statt statisch.

private void messageReceived (object sender, messageReceivedEvent args) {} 

Wenn Sie wollen, dass es halten statisch, dann müssen Sie die sender Instanz verwenden, die eine Referenz auf Ihre MainWindow Instanz sein sollte, alles, was Sie tun müssen, ist es gegossen.

private static void messageReceived (object sender, messageReceivedEvent args) 
{ 
    ((MainWindow)sender).stopProcesses(); 
} 
Verwandte Themen