带调度器的C#WPF定时器(秒表)
我想做一个简单的秒表,但它就是不工作。。当我按下按钮时,应用程序就崩溃了。怎么了带调度器的C#WPF定时器(秒表),c#,wpf,dispatchertimer,C#,Wpf,Dispatchertimer,我想做一个简单的秒表,但它就是不工作。。当我按下按钮时,应用程序就崩溃了。怎么了 public partial class MainWindow : Window { private DispatcherTimer timer; public MainWindow() { InitializeComponent(); DispatcherTimer timer = new DispatcherTimer(new TimeSpan(0, 0
public partial class MainWindow : Window
{
private DispatcherTimer timer;
public MainWindow()
{
InitializeComponent();
DispatcherTimer timer = new DispatcherTimer(new TimeSpan(0, 0, 0, 0, 1), DispatcherPriority.Normal, delegate
{
this.Show.Text = DateTime.Now.ToString("HH:mm:ss:fff");
}, this.Dispatcher);
}
private void Start(object sender, RoutedEventArgs e)
{
timer.Start();
}
private void Stop(object sender, RoutedEventArgs e)
{
timer.Stop();
}
}
你的问题是:
DispatcherTimer timer = ...
您已经创建了计时器的新实例,其作用域为构造函数。您尚未设置成员变量计时器
。这意味着当您点击开始按钮时,您将尝试启动一个尚未实例化的计时器,您将得到一个NullReferenceException。我建议你:
- 将成员变量
重命名为timer
。这有助于避免混淆类似命名的局部变量\u timer
- 将行
更改为dispatchermer timer=new dispatchermer
\u timer=new dispatchermer(…
Start
,请输入?@bah,我为你扩展了我的答案。但我仍然不明白,如果我有一个类变量timer,为什么它会创建具有确切名称的局部变量?这正常吗?@bah-是的,这正常,两个变量实例都可以从构造函数中获得(只需使用this.timer
访问类变量,同时使用本地变量)。这就是为什么当开发人员不使用一些标准来命名他们的类/成员变量时,我讨厌它的一个原因,它会像这样导致混乱。虽然也有一些IDE插件,但通过良好的编码习惯可以避免这种情况(像ReSharper)这将有助于抓住这类问题。我也对他的问题进行了尝试,并试图写一个自己的解决方案(出于某种原因,现在等待否决票),但我记得当我这样做的时候,我也被nullReference异常所困扰。我觉得我需要帮助。