c#事件处理程序没有覆盖

时间:2017-04-21 10:36:15

标签: c# eventhandler

我已经开始了一份新工作,最后一个开发人员想要一个他开始完成的程序。

我遇到了这个问题并且已经看了半天。

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行和第34行收到错误;没有超载#39; logTimer_Tick&#39;匹配代表&#39;事件处理程序&#39;&#34;

它调用的函数剂量存在并且看起来像这样

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

任何想法都会很棒

提前致谢

编辑

更改错误消息&#34; Typo&#34;

的措辞

1 个答案:

答案 0 :(得分:0)

直接使用方法:

logTimer.Tick += logTimer_Tick;

这应该会有所帮助,因为编译器会对您的EventHandler执行奇怪的操作。

奇怪的是,您的代码似乎在我的机器上运行 - 这意味着您发布的代码不等于您尝试的代码,或者它是您的编译器导致的错误。或者,作为第三种可能性,logtimer不是WinForms计时器,那么我无法重现您的问题。

在第三种情况下,第二个参数可能不是一个EventArg(尽管如果你不使用EventHandler的东西,它会很奇怪)。然后你可以尝试一个对象作为第二个参数:

private void logTimer_Tick (object sender, object e)

Windows phone 8.1(No overload for 'method' matches delegate 'System.EventHandler')似乎是必要的。