まず、私の下手な英語で申し訳ありません。
ほぼリアルタイムで曲線を描かなければなりません。これを行うには、次を使用します: - ポイントをスタックするスレッド - ポイントをアンスタックするスレッド - そして、私にとって一種のブラックボックスであり、Invoke method を使用してウィンドウDispatcherによって到達できる「グラフィック スレッド」 。
Dispatcher.Invoke への呼び出しの開始と終了の間の時間をログに記録すると、3 から 110 ミリ秒のリード タイムが表示されます。そして、効果的な描画方法の開始と終了の間に、3 から 55 ミリ秒のリード タイムが表示されます ?!!? どうすればこんなに多くの時間を無駄にできるのか、なぜこんなにランダムなタイミングが得られるのか、さらにはどうすればこれを迅速かつストレートにできるのか理解できません。 S)
アンスタック スレッド ループ:
while (exRunningFlag)
{
lock (myLock)
{
while ( stackingListPoint.Count > 0)
{
LOG
this.Dispatcher.Invoke(new Action(() =>
{
LOG
graph.AddPoint(this.stackingListPoint.Dequeue());
LOG
}), System.Windows.Threading.DispatcherPriority.Send);
LOG
}
}
}
Thread.Sleep(3);
}
public void AddPoint(System.Windows.Point pt)//Data
{
int resNeedResize = needResize(pt);
// ------ rare case, only when need to redraw all curves. This is not relative to my weird delay
if (resNeedResize != 0)
{
ReDraw(resNeedResize);
return;
}
// ----
currentPt = ConversionDataPtToGraphPt(pt);
if ((lastPt.X != -1) && (lastPt.Y != -1))
{
g = CreateGraphics();
g.DrawLine(pen_Courbe, lastPt, currentPt);
g.Flush();
}
lastPt = currentPt;
ListPointCollection.Last().Add(pt);
}
あなたが私にもたらすことができるどんな助けにも感謝します.
PS: フランス語でその投稿を既に見た人には申し訳ありません :p