最初に、私はすでにthis postとthisとthisを読みましたが、それらのどれも私の問題を解決していないようです。WPF ProgressBarを呼び出されたアクションから更新する
を簡単に説明、私は、呼び出されたアクション内で複数回呼ばれているアンマネージDLL、すなわち
var d = new List<string>();
var myData = new StringBuilder();
this.Dispatcher.Invoke(new Action(() =>
{
myDLL.GetDataFromIndex(2, myData);
d.Add(myData.ToString());
myDLL.GetDataFromIndex(3, myData);
d.Add(myData.ToString());
myDLL.GetDataFromIndex(4, myData);
d.Add(myData.ToString());
//....
}
), System.Windows.Threading.DispatcherPriority.ContextIdle);
を持っている私はProgressBar
によってデータを取得の進捗状況を表示したいです。まず、私は、それは明らかに動作しませんでしたし、それがまたmyDLL
通話を台無しにした各d.Add(...)
pbStatus.Value = newValue;
後に次の行を入れてProgressBar
右後の各DLLの呼び出しを更新しようとしました。その後、ProgressBar
はBackgroundWorker
で更新する必要があることがわかりましたが、呼び出されたアクション内に新しいBackgroundWorker
を定義することができませんでした。さらに、DLL呼び出しには異なる時間がかかります。たとえば、GetDataFromIndex(2, ...)
の後では、プロセスの20%が完了し、次のインデックスはそれぞれ5〜10%をとります。各DLL呼び出しの直後にProgressBar
を更新する方法がわかりません。何かのヒントや回避策は何時間も無駄なグーグルからの疲れのために非常に高く評価されるだろう。
これは意味がありませんでしたか?例外がスローされましたか?ビジュアルアップデートはありませんか?どのようにあなたのDLLの呼び出しを台無しにすることができますか? Debug.WriteLineを使用してVisual Studioの出力タブに項目を出力し、呼び出されたアクションがどこで終了するかを確認します。コード内の各コード行の後にそのような出力行を置いて、終了する部分を確認します。 –
@MichalHaincなぜなら、DLLを持たないと無駄だったからです。そして私はその問題をできるだけ明確に述べました。 dllの呼び出しを台無しにすると、dllは前に正しいデータを得ていますが、それは奇妙なことです。そして例外はありませんでした –