0

VS 2010 では、ボタンのクリック時にテキスト ファイルを読み込んで、その値をステータス ボタンの値として設定しようとしています。テキスト ファイルには常に 0 から 100 までの数字の 1 行が含まれます。私は C++ に精通しているので C++/CLI でこれを実行しようとしていますが、これはまったく別の言語のように思えます。これは私が持っているものですが、GUI がクラッシュします。ループの障害であることはわかっていますが、理由はわかりません。これにアプローチするための最良の(noob)方法は何ですか?

    while (result<100)
    {
            StreamReader ^read=gcnew StreamReader("Status.txt");                    
            String ^x=read->ReadLine();
            read->Close();
            Int32::TryParse(x, result);
            progressBar1->Value= result;    
    }
4

1 に答える 1

0

GUIにWPFとWinFormsのどちらを使用しているかは述べていませんが、この回答はどちらにも等しく当てはまります。

ボタン ハンドラーで while ループが発生した場合、そのコードは UI スレッドで実行されています。UI スレッドは、GUI の再描画も担当します。ボタン メソッドが返されないため、「再描画」コードに到達せず、UI が停止します。

これらの整数 0 から 100 をファイルに書き込んでいるものについては言及していません。それが同じアプリケーション内の別のスレッドである場合、スレッド間で進行状況を通信するためのはるかに優れた方法があります。

Timerwhile ループを何らかのオブジェクトに置き換えることをお勧めします。(WPF を使用しているか WinForms を使用しているかに応じて、適切なクラスがあります。) 間隔を 500 ミリ秒などに設定し、バックグラウンド タスクの開始時にタイマーを開始し、終了時にタイマーを停止します。タイマー メソッドでは、while ループを使用せず、1 回だけ実行します。

于 2012-09-08T04:45:28.803 に答える