2017-04-21 1 views
-2

J'ai commencé un nouveau travail, où le dernier dev est parti, ils veulent un programme qu'il a commencé à terminer.C# Gestionnaire d'événements non overide

Je suis arrivé à ce problème et l'ai regardé pendant une demi-journée.

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    logTimer = new System.Windows.Threading.DispatcherTimer(); 
    logTimer.Tick += new EventHandler(logTimer_Tick); 
    logTimer.Interval = new TimeSpan(0, 0, 0, 1); 
    logTimer.Start(); 

    txtLogData.Text = Logger.GetLines(); 

    try 
    { 
     DataProcessor gaugeProcessor = new DataProcessor(SQLConnectionString); 
     gaugeProcessors.Add(gaugeProcessor); 

     grdProcessor.ItemsSource = gaugeProcessors; 

     List<GaugePort> ports = SQLClient.GetGaugePorts(SQLConnectionString); 

     foreach(GaugePort port in ports) 
     { 
      GaugePortListener newListener = new GaugePortListener(port); 
      listeners.Add(newListener); 
     } 

     grdPorts.ItemsSource = listeners; 
    } 
    catch(Exception ex) 
    { 

    } 
} 

Je reçois une erreur sur la ligne 4 « Pas de surcharge pour « logTimer_Tick » correspond aux délégués de gestionnaire d'événements »

La fonction qu'il appelle existe dose et ressemble à ceci

private void logTimer_Tick(object sender, EventArgs e) 
{ 
    txtLogData.Text = Logger.GetLines(); 
} 

J'ai regardé les liens ci-dessous mais j'ai dessiné un blanc http://www.yoda.arachsys.com/csharp/threads/parameters.shtml

C# method name expected

Toutes les idées seraient grandes

Merci à l'avance

EDIT

Modifier le libellé du message d'erreur "Typo"

+0

Cela vous aide-t-il si vous changez simplement la nouvelle forme 'logTimer.Tick + = logTimer_Tick;'? –

+2

Quelque chose d'étrange se passe. Votre gestionnaire d'événements correspond au délégué https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.tick(v=vs.110).aspx – Jamiec

+1

Je viens de tester ce code dans LinqPad et il compile bien. Je ne suis pas sûr de ce qui se passe, pouvez-vous poster un [MVCE] (https://stackoverflow.com/help/mcve)? – DaveShaw

Répondre

0

utiliser directement la méthode:

logTimer.Tick += logTimer_Tick; 

Cela devrait aider, un s le compilateur fait des choses étranges avec votre EventHandler. La chose étrange est que votre code semble fonctionner sur ma machine - cela signifie que le code que vous avez posté n'est pas égal au code que vous avez essayé ou c'est un bug causé par votre compilateur. Ou, comme une troisième possibilité, le logtimer n'est pas une minuterie WinForms, alors je ne peux pas reproduire votre problème.

Dans ce troisième cas, il se peut que le deuxième paramètre ne soit pas un EventArg (même s'il serait étrange que cela fonctionne si vous n'utilisez pas le composant EventHandler). Ensuite, vous pouvez essayer un objet comme second paramètre:

private void logTimer_Tick (object sender, object e) 

Il semble être neccessary pour Windows Phone 8.1 (No overload for 'method' matches delegate 'System.EventHandler').

+2

Quelles choses étranges fait-il? Avez-vous des références? Je suis intéressé à en apprendre plus à ce sujet – musefan