如果计时器已经过去。我想运行一些代码,但错误返回?

时间:2010-01-27 22:06:45

标签: c# asp.net datetime multithreading

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
using System.IO;

namespace TimerApp4
{
    class Program
    {
        public static int k;
        static void Main(string[] args)
        {
            Timer t = new Timer(1000);
            t.Elapsed += new ElapsedEventHandler(SaniyelikIs);
            t.Start();
            k = 0;
            Console.Read();
        }

        static void SaniyelikIs(object o, ElapsedEventArgs a)
        {
            TextWriter tw = null;
            k++;
            if (k == 0)
            {
                tw = new StreamWriter("TextFile1.txt");

                // write a line of text to the file

                tw.WriteLine(DateTime.Now);
            }
            else
                tw.WriteLine(DateTime.Now);


            // close the stream
            tw.Close();

        }
    }
}

我可以运行它但是“new StreamWriter(”TextFile1.txt“); “给我错误:未分配的局部变量。这就是结果。我怎么能这样呢

2 个答案:

答案 0 :(得分:3)

您只是在if语句的StreamWriter一半中创建true。如果它是这样的话,你的代码看起来会更好:

    TextWriter tw = new StreamWriter("TextFile1.txt");
    k++;
    if (k == 0)
    {
        // write a line of text to the file
    }
    tw.WriteLine(DateTime.Now);

    // close the stream
    tw.Close();

但是,我也注意到您将k初始化为零并且只是递增它,因此if (k == 0)只会评估为false

答案 1 :(得分:0)

问题在于你使用k的逻辑:

k++;
if (k == 0)

在if块之前递增k,这意味着未实例化实例化StreamWriter的“if(k == 0)”块。它改为尝试使用tw的else块,但它实际上并未实例化(仍为null)。