1

Windows フォーム アプリケーションで、フォームを正常に実行しました。

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

できます。フォームをロードしました。

しかし、フォームがロードされた後にサイクルで何かを行う場合は、次のように言います...

String MyLog = Directory.GetCurrentDirectory() + "\\MyLog.txt";

while (true)
{
                using (StreamWriter writer = new StreamWriter(MyLog, true))
                {
                    writer.Write("Hello");
                }
                Thread.Sleep(1000);
}

...フォームが閉じたりクラッシュしたりしています。

フォームの Load プロパティで特別なイベント ハンドラーを指定しようとしましたが、役に立ちませんでした。

このコードは機能します (「Hello」という文字列が書かれており、フォームは有効です):

private void formLoad(object sender, EventArgs e)
    {
          String MyLog = Directory.GetCurrentDirectory() + "\\MyLog.txt";


                    using (StreamWriter writer = new StreamWriter(MyLog, true))
                    {
                        writer.Write("Hello");
                    }
                    Thread.Sleep(1000);

    }

このコードは機能しません (サイクルを追加しました) - フォームがクラッシュします:

   private void formLoad(object sender, EventArgs e)
    {
          String MyLog = Directory.GetCurrentDirectory() + "\\MyLog.txt";

          while (true)
          {
                    using (StreamWriter writer = new StreamWriter(MyLog, true))
                    {
                        writer.Write("Hello");
                    }
                    Thread.Sleep(1000);
          }

    }

私の質問は、フォームが読み込まれた後にバックグラウンドで何かを実行できるように、コードを整理するにはどうすればよいですか?

4

2 に答える 2

2

BackgroundWorkerバックグラウンドで作業を行い、進行状況や UI の変更を報告できるように特別に設計されたコンポーネントを見てください。

また、呼び出しによって UI スレッドを一時停止していることに注意してください。Thread.Sleep(1000)これは、おそらくうまく終了しません。

バックグラウンド ワーカーに関するドキュメントは、http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspxにあります。

于 2013-06-07T13:33:39.033 に答える