深刻なスワップ/置換操作のために、大きなTxtドキュメントをWPFアプリに読み込んでいます。ファイルは実際には3DSTPモデルであるため、かなり大きいですが、このプロジェクトの生のテキストとして使用しています。ファイルはリストに読み込まれ、何度も開く必要がなくなり、比較が容易になります。
とにかく、ファイルサイズによっては計算に少し時間がかかることがあるため、リストボックスに行が追加されるときにリストボックスを動的にスクロールさせようとしています。これは、コンソールウィンドウで、ユーザーが何かが起こっていることを確認できるようにするためです。また、合計行数が読み取られるときにカウントするプログレスバーを追加しました。
ただし、作業が進むにつれて、プログレスバーもListBoxも更新されないようです。最終的な出力は、完了したリストボックスに表示されるだけで、進行状況バーは同時に0から最大になります。
これが私がしていることの要点であり、かなり単純です。
foreach (string Line in OriginalSTPFile.Lines)
{
string NewLine = EvaluateString(Line); //string the modified to whatever here
pBar.Value++; //increment progressbar
OutputWindow.Items.Add(NewLine); //add line to the ListBox
}
進行状況の変化に応じて、リストボックスの進行状況バーをリアルタイムで更新したいだけです。私は使ってみました:
Dispatcher.BeginInvoke(new Action(() => OutputWindow.Items.Add(NewLine));
しかし、同じ結果が得られました。ここでマルチスレッドのより複雑な方法が必要ですか?クロススレッド例外も生成していなかったので、最初の方法が機能すると思いました。