Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带调度器的C#WPF定时器(秒表)_C#_Wpf_Dispatchertimer - Fatal编程技术网

带调度器的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(…

嗯,是的,我应该……但不管怎样,它只会给我“计时器停止工作了”典型的Windows崩溃信息,你的意思是吗?在Windows执行并终止应用程序之前,捕获所有抛出的异常。异常堆栈跟踪将告诉你你需要知道的一切。你真的需要每毫秒打勾吗?不是真的。我知道这不是必要的,这只是为了测试目的。@bah,你希望发生什么如果你在一个尚未初始化的计时器上调用
Start
,请输入?@bah,我为你扩展了我的答案。但我仍然不明白,如果我有一个类变量timer,为什么它会创建具有确切名称的局部变量?这正常吗?@bah-是的,这正常,两个变量实例都可以从构造函数中获得(只需使用
this.timer
访问类变量,同时使用本地变量)。这就是为什么当开发人员不使用一些标准来命名他们的类/成员变量时,我讨厌它的一个原因,它会像这样导致混乱。虽然也有一些IDE插件,但通过良好的编码习惯可以避免这种情况(像ReSharper)这将有助于抓住这类问题。我也对他的问题进行了尝试,并试图写一个自己的解决方案(出于某种原因,现在等待否决票),但我记得当我这样做的时候,我也被nullReference异常所困扰。我觉得我需要帮助。