多个表单和单个更新,它会工作吗?

时间:2008-09-17 18:02:57

标签: c# .net compact-framework

我需要在.NET CF中创建一个具有不同/单一形式的应用程序,每个表单上都有大量的绘图/动画。我更希望有一个单独的更新[我自己的状态管理等等]功能,以便我可以管理不同的状态,这样我的[J2ME游戏代码]就可以在没有太大变化的情况下工作。我已经找到了一些可能的场景。哪一个是完美的?

  1. 有一个表单并手动添加/删除控件,然后使用任何游戏搭配技巧。
  2. 使用控件创建不同的表单,并在主线程中调用update和application.doEvents()。[while(isAppRunning){UPDATE()Application.DoEvents()}
  3. 根据需要在每个表单上创建一个更新 - 绘制循环。
  4. 任何其他想法。
  5. 请给我关于此的建议

1 个答案:

答案 0 :(得分:1)

如果它是一个游戏,那么我将删除大多数表单并使用基本要素,如果可能的话,处理位图并通过覆盖主窗体的绘制方法或驻留在其中的控件(可能是面板)。这会给你更好的表现。

主要的问题是,紧凑的框架并不是真的设计用于很多UI的乐趣,你没有像完整的框架那样免费获得双缓冲,适当的透明度是一个与WinForm控件有关的瑕疵,如果你坚持UI线程有点太长时间你会得到严重的渲染故障。如果你在后台线程上做太多话,你甚至可能会得到那些! :o

你永远不会通过显式调用Application.DoEvents获得最佳性能,我的经验法则是只在故障排除或在UI中编写小黑客时才使用它。

可能值得将游戏粘贴在后台线程上,然后调用控件上的.Invoke来编组回主UI线程以更新显示,让UI有足够的时间响应,同时还处理用户输入。 用户输入是我避免正常winform控件的另一个原因,因为移动设备通常没有很多键,因此能够重新映射它们非常有用所以我通常会避免使用具有预设键事件/响应的TextBox。

我还避免使用不同的表单,因为显示新表单可以提供微妙的暂停,我通常会将控件换成主表单以避免在编写商业软件时出现此问题。

在一天结束时,可能值得尝试各种技术,以了解最佳效果。另外,看看你是否可以从使用CF开发游戏的人那里获得任何提示,因为我通常只会使用商业软件。

HTH!