我正在编写一个.NET CompactFramework应用程序,它在PDA上显示地图。
我已经创建了一个临时组件来绘制它自己的整个地图,使用这些组件中的几个组成了大图。我这样做是为了避免在一步内绘制整个地图的延迟。
我想知道的是在它们自己的线程中绘制这些部分,这样映射看起来就像一个单一的实体,并且避免冻结用户界面的其余部分。
地图的每一块都是用它的onPanne方法绘制的。我的问题是不知如何告诉系统“请在线程中执行此代码”。
类似于:
protected override void OnPaint(PaintEventArgs e)
{
// <code to be executed in a thread>
e.Graphics.paintTHis();
e.Graphics.paintThat();
whateverItTakesToPaintThisPieceOfTheMap();
// </code to be executed in a thread>
}
你知道怎么做吗?还是我的做法完全错了?
发布于 2018-08-08 10:08:33
这种做法是错误的。更新UI的代码必须在UI线程上运行。如果从另一个线程更新UI,将得到一个异常。
发布于 2018-08-08 12:00:04
在后台线程中绘制内存中的地图,然后呈现(在UI线程中)该光栅图像在准备就绪时显示。如果可能,请使用BufferedGraphics,否则使用GDI。
https://stackoverflow.com/questions/-100000528
复制相似问题