プログラムのメイン フォームを希望どおりに実行するのに問題があります。私はC#を使用しています。最初のメイン フォーム (Form1) には、長いプログラムを実行するコマンド ボタンがあります。プログラムの途中で、ユーザーが最初のフォームに戻って、C# プログラム内からその最初のフォームに配置するいくつかの新しいチェックボックスをクリックできるようにしたいと考えています。以下のコードは、初期フォームをフリーズするだけです。以下のコードを正確に動作させる必要はありません。コマンドボタンで開始したプログラムの途中でメインの初期フォームにアクセスできるようにするために必要です。
これを行うには、タイマーを呼び出す無限 while ループがあります。これはこれを行う正しい方法ですか?以下のプログラムは必要ありません。プログラムの途中でその初期フォームにアクセスできるようにする必要があるだけです。それが機能していないので、これを行う方法ではないようですが、正しい方法は何ですか?
次のコードは、以下の OnTimedEvent 関数 (メソッド) を実行します。この関数はメッセージボックスを表示するために使用されていましたが、コメントアウトしました。その機能は必要ありません。テスト目的でのみ存在します。私の目標は、コマンド ボタンからの実行中に詳細情報を入力できるようにするために、最初のメイン フォームが必要であることです。以下の関数は約15回実行され、エラーが発生します
タイプ 'System.OutOfMemoryException' の例外がスローされました。
ライン上でaTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent)
;
コードは以下のとおりです。
System.Timers.Timer aTimer;
// Create a timer with a one second interval.
aTimer = new System.Timers.Timer(100);
while (true)
{
// Hook up the event handler for the Elapsed event.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Only raise the event the first time Interval elapses.
aTimer.AutoReset = false;
aTimer.Enabled = true; // uncommented this now
//addded below
aTimer.Start();
}
いくつかの異なる方法で試しましたが、メインのフォームは常にフリーズします。メインフォーム( )で物事(チェックボックスなど)を選択できるようにしたいだけなForm1
ので、以下のコードは必要ないかもしれません。上記のタイマーOnTimedEvent
は、以下の呼び出しを行います。
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
// MessageBox.Show("Hello World");
}
Web 上の多くの場所 (stackoverflow を含む) で、タイマーを使用してメインの初期フォームを使用可能にする必要があることを確認しましたが、上記のコードではフォームが凍結され、フォームの上部にバーが表示されます。応答していないことを示します。Windows XP と Visual Studio 2008 を使用しています。上で示したように、C# を使用しています。
要約すると、上記のコードは、コマンド ボタンが実行された後にメインの初期フォームを使用できるようにする正しい方法ですか? もしそうなら、私は何を間違っていますか?これが正しい方法ではない場合、何が正しいのでしょうか?
ところで、ここでこのプロジェクトについてまったく関係のない質問をしました
何か案は?