首先,对不起我的英语不好。
我必须几乎实时地绘制一条曲线。为此,我使用: - 一个用于堆栈点的线程 - 一个用于取消堆栈点的线程 - 以及对我来说是一种黑盒的“图形线程”,我只能通过带有Invoke方法的窗口调度程序来访问它。
当我记录调用 Dispatcher.Invoke 的开始和结束之间的时间时,我看到提前期为 3 到 110 毫秒。在有效绘图方法的开始和结束之间,我看到前置时间从 3 到 55 毫秒?!!?我不明白我怎么能浪费这么多时间,为什么我的时间如此随机,以及我如何才能快速而直接地做到这一点。(就像我使用堆栈一样,由于这些巨大的时间,堆栈经常溢出,导致应用程序崩溃: S)
UnStack线程循环:
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);
}
感谢您能给我带来的任何帮助,或者如果您看到我错过了一些相关的东西:S。
PS:对不起那些已经看到法语帖子的人:p