【问题标题】:No overload for 'method' matches delegate 'System.EventHandler'“方法”没有重载匹配委托“System.EventHandler”
【发布时间】:2011-12-25 10:02:42
【问题描述】:

我正在尝试构建一个程序,一旦单击按钮,每 5 秒将执行一次功能 (OnTimed)。

以下是目前的代码:

private void bntCapture_Click(object sender, RoutedEventArgs e)
{ 
    DispatcherTimer t1 = new DispatcherTimer();
    t1.Interval = TimeSpan.FromMilliseconds(5000);
    t1.IsEnabled = true;
    t1.Tick += new EventHandler(OnTimed);
    t1.Start();
}

void OnTimed(object sender, ElapsedEventArgs e)
{

    imgCapture.Source = imgVideo.Source;
    System.Threading.Thread.Sleep(1000);
    Helper.SaveImageCapture((BitmapSource)imgCapture.Source);
} 

当我运行代码时,它显示错误:

“‘方法’没有重载匹配委托‘System.EventHandler’

【问题讨论】:

    标签: c# .net wpf compiler-errors


    【解决方案1】:

    事件处理方法的签名与委托类型不兼容。

    DispatcherTimer.Tick 事件的订阅者必须是EventHandler 委托类型,声明为:

    public delegate void EventHandler(object sender, EventArgs e);
    

    试试这个:

    void OnTimed(object sender, EventArgs e)
    {
       ...
    }
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 Windows phone 8.1,那么您需要以下内容

      private void OnTimed(object sender, object e) {
            // You Code Here
       }
      

      【讨论】:

        【解决方案3】:

        方法 OnTimed 必须像这样声明:

         private void OnTimed(object sender, EventArgs e)
         {
             // Do something
         }
        

        【讨论】:

          【解决方案4】:

          我知道这可能有点晚了,但我只是想为有这个问题的人多做一点:

          timer.Tick += new EventHandler(Method);
          
          public void Method(object sender, EventArgs e)
          {
          //Do Something
          }
          

          解决问题。

          也可以这样写:timer.Tick += Method;

          timer.Tick += Method;
          
          public void Method(object sender, EventArgs e)
          {
          //Do Something
          }
          

          希望对你有帮助!

          【讨论】:

            【解决方案5】:

            Dispatcher.Tick 是简单的EventHandler:

            公共事件EventHandler Tick;

            所以EventHandler参数应该是:

            void OnTimed(object sender, EventArgs e)
            

            不是

            void OnTimed(object sender, ElapsedEventArgs e)
            

            看起来你在System.Timers.Timer.Elapsed 事件中有点被忽视了 即:

            public event ElapsedEventHandler Elapsed
            
            public delegate void ElapsedEventHandler(
                Object sender,
                ElapsedEventArgs e
            )
            

            【讨论】:

              【解决方案6】:

              在我的例子中,我使用自定义 winforms 控件进行 digitalPersona 指纹识别。

              当我尝试重载“OnComplete”方法时,它会提出“无重载...”

              private void FingerprintVerificationControl_OnComplete(object control, DPFP.FeatureSet featureSet, DPFP.Gui.EventHandlerStatus eventHandlerStatus)
              

              这就是它的样子。

              我查看了程序集,发现第三个参数附加了“ref”关键字。我在我的代码中添加了它并且它起作用了:

              private void FingerprintVerificationControl_OnComplete(object control, DPFP.FeatureSet featureSet, ref DPFP.Gui.EventHandlerStatus eventHandlerStatus)
              

              【讨论】:

              • 很遗憾,这与最初的问题(已经得到充分回答)无关。
              • 是的,但我用谷歌搜索了这篇文章的标题,发现答案与此处选择的答案不同。别人遇到和我一样的问题就这么难吗?我不是为了代表或 w/e 发布它 - 我想帮助别人,这就是这个网站的全部意义..
              • 正确的做法是创建适合您的问题的自己的问题,并使用正确的标签(Windows 窗体等..)并自己回答。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多