問題排查:沒有任何多載符合 System.Timers.ElapsedEventHandler 委派
Posted 吉格艾諾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了問題排查:沒有任何多載符合 System.Timers.ElapsedEventHandler 委派相关的知识,希望对你有一定的参考价值。
這是在實作當前專案最後一個關鍵功能:提醒通知
所遇到的奇怪狀況
目前的設想,是以 Windows Form 結合 Timer,當作發送通知的載體
大家都知道在 C# 的環境裡,有三種內建的 Timer 可用:Windows Form Timer、System.Timer、Threading.Timer
遇到的怪事,主要是在 System.Timer 這一段
代碼如下:
using System; using System.Drawing; using System.Text; using System.Threading; using System.Timers; using System.Windows.Forms; namespace SystemTimer { public partial class Form1 : Form { int number = 0; DateTime dt1 = new DateTime(); DateTime dt2 = new DateTime(); System.Timers.Timer tm; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void b1_Click(object sender, EventArgs e) { tm = new System.Timers.Timer(); tm.Interval = 20; tm.Enabled = true; tm.Elapsed += new System.Timers.ElapsedEventHandler(tm_elapsed); tm.Start(); dt1 = DateTime.Now; } private void b2_Click(object sender, EventArgs e) { tm.Enabled = false; dt2 = DateTime.Now; MessageBox.Show(Convert.ToString(dt2 - dt1)); } private void tm_elapsed(object sender, System.Timers.ElapsedEventHandler e) { lbmsg.Text = Convert.ToString(++number); Thread.Sleep(3000); } } }
編譯時在標示紅色的那行提示錯誤,來對照一下微軟的官方參考資料
回調函數原形
public delegate void ElapsedEventHandler( Object sender, ElapsedEventArgs e )
所以只要把
private void tm_elapsed(object sender, System.Timers.ElapsedEventHandler e) { lbmsg.Text = Convert.ToString(++number); Thread.Sleep(3000); }
改成
private void tm_elapsed(object sender, System.Timers.ElapsedEventArgs e) { lbmsg.Text = Convert.ToString(++number); Thread.Sleep(3000); }
就可以了
以上是关于問題排查:沒有任何多載符合 System.Timers.ElapsedEventHandler 委派的主要内容,如果未能解决你的问题,请参考以下文章
問題排查:.NETSystem.Runtime.Remoting.RemotingException: TCP 信道协议冲突: 应为报头。