【发布时间】:2017-01-12 05:45:49
【问题描述】:
我在一个类中声明了一个整数数组。使用该数组,在网格上绘制折线。数组的元素是 y 坐标。数组必须不断更新,然后才能显示值。我实现这一点的想法是有两个线程。一个用于更新数组的值,另一个用于在网格上打印 PolyLine。 更新阵列不是问题。当我尝试使用下面的代码在网格上打印 PolyLine 时,会引发异常并显示以下消息:“调用线程无法访问此对象,因为不同的线程拥有它。” 请使用线程建议解决此问题的方法。也许,可以使用事件而不是线程?我愿意接受建议。任何帮助表示赞赏!
public partial class MainWindow : Window
{
Polyline Wave = new Polyline();
public MainWindow()
{
InitializeComponent();
Refresh();
DisplyOnGrid();
ThreadStart child = new ThreadStart(DisplyOnGrid);
Thread _DisplayOnGrid = new Thread(child);
_DisplayOnGrid.Priority = ThreadPriority.Highest;
_DisplayOnGrid.Start();
}
private void DisplyOnGrid()
{
Wave.Stroke = Brushes.Yellow;
Wave.StrokeThickness = 1.25;
for (int i = 0; i < DisplayGrid.Width; i++)
{
Wave.Points.Add(new Point(i, 50));
}
DisplayGrid.Children.Add(Wave);
}
private void Refresh()
{
DisplayGrid.Children.Clear();
}
}
【问题讨论】:
-
为什么要从网格中删除折线,然后再添加?相反,您可以简单地替换其
Points集合。除此之外,您应该使用答案中所示的 Dispatcher,或者可能根本不使用 Thread,而是使用 DispatcherTimer。
标签: c# wpf multithreading c#-4.0