像控制台app一样刷新测试文件。但是怎么样?

时间:2010-01-29 17:01:09

标签: c# visual-studio timer

我需要你的帮助!如果我的代码运行,Console会出现并逐行写入datetime.now,但是如果我打开我的txt(TextFile1.txt)。我没有看到控制台命令结果。

控制台导致黑色打击垫

  • 22:30 29.01.2010
  • 22:31 29.01.2010
  • 22:32 29.01.2010
  • 22:33 29.01.2010

BUT;另一方面;如果我打开文本文件(Textfile1.txt),我只看到一次结果,我想看到如上所述的整个时间结果。

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

namespace TimerApp4
{
    class Program
    {

        static void Main(string[] args)
        {
              Timer t = new Timer(1000);
                t.Elapsed += new ElapsedEventHandler(SaniyelikIs);
                t.Start();
                Console.Read();
                t.Stop();
        }

        static void SaniyelikIs(object o, ElapsedEventArgs a)
        {
            // write a line of text to the file
            StreamWriter tw = new StreamWriter("TextFile1.txt");
            tw.WriteLine(DateTime.Now);
            Console.WriteLine(DateTime.Now + "\n");
            // close the stream
            tw.Close();

        }
    }
}

3 个答案:

答案 0 :(得分:1)

在程序退出之前,请勿关闭StreamWriter。此外,由于您需要从Timer事件访问TextWriter,您需要使用公共或私有变量。

private static TextWriter tw { get; set; }

static void Main(string[] args)
{
    using (tw = new StreamWriter("TextFile1.txt"))
    {
        Timer t = new Timer(1000);
        t.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        t.Start();
        Console.Read();
        t.Stop();
        tw.Close();
    }

static void OnTimedEvent(object sender, ElapsedEventArgs args)
{
    // write a line of text to the file
    tw.WriteLine(DateTime.Now.ToString());
}

答案 1 :(得分:0)

我不确定我理解你的问题或问题。但是,在您的代码中,您将关闭SaniyelikIs方法中的流。由于此方法将每秒调用一次,因此第二次调用它时,流将已关闭,WriteLine将抛出异常。

答案 2 :(得分:0)

如果我没弄错的话,您希望能够实时查看该文件并将最新的更改输出到该文件的控制台是吗?如果是这样,那么也许你应该考虑使用FileSystemWatcher类为你做这个?

希望这有帮助, 最好的祝福, 汤姆。