【发布时间】:2011-06-08 19:53:29
【问题描述】:
我正在尝试创建一个类,当它启动时它会启动一个秒表,并且一直将经过的时间写入一个局部变量 Elapsed,我有一个数据绑定到的 Listview。但是当我使用这段代码时,Listview 只显示 00:00:00.00000001 并且永远不会改变。 类的代码是:
命名空间项目23 { 公共类 ActiveEmployee { 公共 int EmpID { 获取;放; } 公共字符串 EmpName { 获取;放; } 私人日期时间日期; 私人 BackgroundWorker 工人; 公共秒表软件; 公共 ActiveEmployee(int empID,字符串 empName) { 日期 = 日期时间。现在; 工人=新的背景工人(); worker.DoWork += 背景工作; worker.WorkerReportsProgress = true; worker.RunWorkerAsync(); } 私人时间跨度过去; 公共时间跨度已过 { 得到{返回过去; } 放 { 经过=价值; NotifyPropertyChanged("Elapsed"); } } 私人无效背景工作(对象发送者,DoWorkEventArgs args) { sw = 新的秒表(); sw.Start(); 如果是真的) { Elapsed = sw.Elapsed; } } 公共事件 PropertyChangedEventHandler PropertyChanged; 私人无效NotifyPropertyChanged(字符串信息) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } } }现在它可以使用计时器代替
使用系统; 使用 System.ComponentModel; 使用 System.Timers;命名空间 Eksamen_Januar_2011 { 公共类 ActiveEmployee:INotifyPropertyChanged { 公共 int EmpID { 获取;放; } 公共字符串 EmpName { 获取;放; } 私人日期时间开始日期; 私人 BackgroundWorker 工人; 私人定时器;
public ActiveEmployee(int empID, string empName)
{
startDate = DateTime.Now;
worker = new BackgroundWorker();
worker.DoWork += BackgroundWork;
timer = new Timer(1000);
timer.Elapsed += TimerElapsed;
worker.RunWorkerAsync();
}
private TimeSpan elapsed;
public TimeSpan Elapsed
{
get { return elapsed; }
set
{
elapsed = value;
NotifyPropertyChanged("Elapsed");
}
}
private void BackgroundWork(object sender, DoWorkEventArgs args)
{
timer.Start();
}
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
Elapsed = DateTime.Now - startDate;
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
}
【问题讨论】: