6

これはすでに質問されていることは知っていますが、解決策が見つかりませんでした。これが私のサービスです。

class Program : ServiceBase
{
    private  Timer _timer;
    public Program()
    {
        ServiceName = "PrintTime";
    }

    static void Main(string[] args)
    {
        Run(new Program());
    }

    protected override void OnStart(string[] args)
    {
        base.OnStart(args);
        _timer = new Timer(5000);
        _timer.Elapsed += _timer_Elapsed;
        _timer.Start();
    }

    void _timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        WriteTimeToFile();
    }

    protected override void OnStop()
    {
        _timer.Stop();
    }

    private void WriteTimeToFile()
    {
        using (FileStream fs = new FileStream(@"d:\mylog.txt", FileMode.Append,            FileAccess.ReadWrite))
        {
            StreamWriter streamWriter = new StreamWriter(fs);
            streamWriter.Write(DateTime.Now.ToShortTimeString());
            streamWriter.Close();
            fs.Close();
        }
    }

}

ご覧のとおり、5秒ごとにファイルに書き込みたいのですが、2分経っても何も起こりませんcurrentTime。関数をメソッドMylog.txtに入れると、正常に機能しますが、タイマーでは機能しません。WriteTimeToFile()OnStart

どんな助けでも大歓迎です。

4

4 に答える 4

6

タイマーの名前空間は何ですか?System.Timers.Timerまたはである必要がありますSystem.Threading.Timer

こちらをご覧ください:Windowsサービスで使用するのに最適なタイマー

于 2012-10-20T07:17:24.740 に答える
1

さて、数時間後、タイマーが正常に機能していることに気づきました。タイマーには何の問題もありませんでした。しかし、問題はFileStreamコンストラクターに関するものです。FileMode.Appendによってのみ機能しFileAccess.Writeます。

したがって、このコード行を修正することで問題が解決しました。

とにかく、ご清聴ありがとうございました。

using (FileStream fs = new FileStream(@"d:\mylog.txt", 
                       FileMode.Append, FileAccess.Write))
于 2012-10-23T09:49:57.583 に答える
0

サービスは、D:\ディレクトリへの書き込み権限を持つWindowsアカウントで実行されている必要があります。

イベントビューアで例外をチェックして、不正アクセスの例外がないかどうかを確認します。

また、_timer_Elapsedメソッドにブレークポイントを設定して、呼び出されることを確認し、コードをステップ実行します。

于 2012-10-20T07:34:55.687 に答える
0

タイマー付きのWindowsサービス

この投稿で私の答えを読んでください...

たぶんあなたはtimer.AutoReset=trueを逃します。

于 2012-10-20T10:27:08.807 に答える