2017-04-21 62 views
-2

我已經開始了一個新的工作,最後一個開發人員離開他們想要一個他開始完成的程序。c#事件處理程序沒有被覆蓋

我有這個問題,並看着它半天。

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) 
    { 

    } 
} 

我在第4行得到一個錯誤「無過載爲‘logTimer_Tick’匹配代表‘事件,’」

它調用的劑量存在,看起來像這樣

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

中的作用我看了一下下面的鏈接,但是我畫了一張空白圖片 http://www.yoda.arachsys.com/csharp/threads/parameters.shtml

C# method name expected

任何想法,將提前

編輯

更改錯誤信息 「輸入錯誤」 這一措辭

+0

如果您只是將其更改爲更新的形式'logTimer.Tick + = logTimer_Tick;',它有幫助嗎? –

+2

有什麼奇怪的事情發生。您的事件處理程序與委託相匹配https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.tick(v=vs.110).aspx – Jamiec

+1

我剛剛在LinqPad中測試了這段代碼它編譯得很好。我不確定發生了什麼,你可以發佈[MVCE](https://stackoverflow.com/help/mcve)嗎? – DaveShaw

回答

0

直接使用方法大

感謝:

logTimer.Tick += logTimer_Tick; 

這應該有幫助,一個編譯器會對你的EventHandler做一些奇怪的事情。

奇怪的是,你的代碼似乎在我的機器上工作 - 這意味着你發佈的代碼不等於你嘗試過的代碼,或者是由您的編譯器的bug。或者,作爲第三種可能性,logtimer不是WinForms計時器,那麼我無法重現您的問題。

在這第三種情況有可能是第二個參數是不是EventArg(即使它會是奇怪的是,它的工作原理,如果你不使用的事件處理程序的東西)。那麼你可以嘗試一個對象作爲第二個參數:

private void logTimer_Tick (object sender, object e) 

這似乎是neccessary Windows Phone的8.1(No overload for 'method' matches delegate 'System.EventHandler')。

+2

它做什麼奇怪的事情?你有任何參考?我有興趣瞭解更多 – musefan

相關問題