0
我完全不熟悉C#中的事件和代表。 我想處理一個類(例如程序)中的數據讀取事件,並在另一個類(例如傳輸)中完成端口讀取。 我知道如何與代表獨自做,但不知道如何在事件中做到這一點。如何在c#中添加事件處理程序?
你能給我一個簡單的例子。謝謝。
我完全不熟悉C#中的事件和代表。 我想處理一個類(例如程序)中的數據讀取事件,並在另一個類(例如傳輸)中完成端口讀取。 我知道如何與代表獨自做,但不知道如何在事件中做到這一點。如何在c#中添加事件處理程序?
你能給我一個簡單的例子。謝謝。
看看這個例子
public class TimerManager : INotifyPropertyChanged
{
private readonly DispatcherTimer dispatcherTimer;
private TimeSpan durationTimeSpan;
private string durationTime = "00:00:00";
private DateTime startTime;
private bool isStopped = true;
readonly TimeSpan timeInterval = new TimeSpan(0, 0, 1);
public event EventHandler Stopped;
public TimerManager()
{
durationTimeSpan = new TimeSpan(0, 0, 0);
durationTime = durationTimeSpan.ToString();
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += DispatcherTimerTick;
dispatcherTimer.Interval = timeInterval;
dispatcherTimer.IsEnabled = false;
DefaultStopTime = new TimeSpan(17, 30, 0);
}
public TimerManager(TimeSpan defaultStopTime)
: this()
{
DefaultStopTime = defaultStopTime;
}
#region Properties
public TimeSpan ElapsedTime
{
get { return durationTimeSpan; }
}
public string DurationTime
{
get { return durationTime; }
set
{
durationTime = value;
OnPropertyChanged("DurationTime");
}
}
public DateTime StartTime
{
get { return startTime; }
}
public bool IsTimerStopped
{
get
{
return isStopped;
}
set
{
isStopped = value;
OnPropertyChanged("IsTimerStopped");
}
}
public TimeSpan DefaultStopTime { get; set; }
#endregion
#region Start Stop Timer
public void StartTimer()
{
dispatcherTimer.Start();
durationTimeSpan = new TimeSpan(0,0,0);
startTime = DateTime.Now;
IsTimerStopped = false;
}
public void StopTimer()
{
dispatcherTimer.Stop();
IsTimerStopped = true;
if (Stopped != null)
{
Stopped(this, new EventArgs());
}
}
#endregion
public void DispatcherTimerTick(object sender, EventArgs e)
{
// durationTimeSpan = DateTime.Now - startTime;
durationTimeSpan = durationTimeSpan.Add(timeInterval);
DurationTime = string.Format("{0:d2}:{1:d2}:{2:d2}", durationTimeSpan.Hours, durationTimeSpan.Minutes,
durationTimeSpan.Seconds);
if (DateTime.Now.TimeOfDay >= DefaultStopTime)
{
StopTimer();
}
}
}
這節課,我們已在停止計時器事件
public event EventHandler Stopped;
在我們調用事件處理程序的方法中,如果它不爲null
public void StopTimer()
{
dispatcherTimer.Stop();
IsTimerStopped = true;
if (Stopped != null)
{
//call event handler
Stopped(this, new EventArgs());
}
}
使用這個類和計時器停止事件看代碼
var timer = new TimerManager();
timer.Stopped += TimerStopped;
void TimerStopped(object sender, EventArgs e)
{
// do you code
}
如果我nright明白你問什麼,你可以做這樣的事情:
public class MyClass
{
...
public void delegate MuCustomeEventDelegate(...params...);
public event MuCustomeEventDelegate MuCustomeEvent;
...
}
我敢肯定,微軟樣本此。 – BoltClock
嗨 - 正常情況下,你只是「處理程序」添加到像'Button.Click + = OnButtonClickedHandler;'這樣的事件 - 但是你用什麼方式(例如程序)?你想處理進程/程序中的事件嗎? – Carsten