在.NET4.0 WPF中,我想使用後臺線程在畫布上顯示drawingPath。以下ConsumerJob在後臺正確運行並輪詢要繪製的點隊列。我使用Dispatcher來修改主線程上的畫布,並正確渲染它。不過,我希望這段代碼能夠在每個children.add被調用時(像動畫一樣)每次顯示一個片段。會發生什麼情況是整個顯示會一次渲染而不是一次一個渲染。我應該如何修改代碼來呈現顯示,因爲一次添加一個兒童?canvas未實時更新後臺線程
public void ConsumerJob()
{
while (true)
{
PointsD pt = (PointsD)queue.Consume();
displayQueue.Enqueue(pt);
pt = Scale(pt);
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
(ThreadStart)delegate()
{
Path drawingPath = new Path();
StreamGeometry streamingGeometry = new StreamGeometry();
drawingPath.Stroke = Brushes.Black;
drawingPath.StrokeThickness = 0.5;
using (StreamGeometryContext ctx = streamingGeometry.Open())
{
ctx.BeginFigure(new Point(pt.x0, pt.y0), false, false);
ctx.LineTo(new Point(pt.x1, pt.y1), true, false);
}
streamingGeometry.Freeze();
drawingPath.Data = streamingGeometry;
this.Children.Add(drawingPath);
}
);
}
其他選項可以一直使用'BackgroundWorker',它提供了3個事件,如DoWork的()(只有上面的委託代碼),ProgressNotified()(將在畫布的孩子)和WorkCompleted()(時間表接下來是bgworker的RunAsync()),這讓它感覺它是一個永久工作的線程,它會同步通知UI線程,以動畫的形式向畫布添加新的位。 –