void Method1(object sender, DoWorkEventArgs e)
{
var list1 = (List<some objects>)e.Argument;
var list2 = new List<WaitHandle>();
foreach (var thing in list1)
{
var ws = new ManualResetEvent(false);
list2.Add(ws);
dispatcher.BeginInvoke(DispatcherPriority.Background,
new RunDelegate(Method2), thing, ws);
}
WaitHandle.WaitAll(list2.ToArray());
ConvertList1ToPDF(list1);
}
// ------------------------------------------------------------------
void Method2(Thing thing, ManualResetEvent handle)
{
var class = thing;
Class.RenderImages();
PDFCount++;
UpdateStatusMessage("Do something " + PDFCount + " of " +
NumberofPfdToCreate.Count() + " compounds");
handle.Set();
}
メモリを解放しない複数のスレッドに問題があります。データ オブジェクトから PDF チャートを作成しています。
配置は、データ オブジェクトをループすることです。データ オブジェクトごとに を作成し、ManualResetEvent
に追加しlist2
ます。次に、ディスパッチャーを で開始し、オブジェクトをパラメーターとしてBeginInvoke
渡します。ManualResetEvent
次にWaitHandle.WaitAll(...)
、すべてWaitHandle
の s があります。
問題は、メモリが解放されていないことです。最終的に「メモリ不足」の例外が発生するまで、それは蓄積されます。
私は必ずしも解決策を探しているわけではありません。問題が何であるかを誰かがよく知っているかどうかを探しているだけです。
WPF 3.5 で実行しています。
ありがとう