DoubleBuffered Paint DrawImage Invalidate更新同步与异步确定性解释

时间:2014-09-23 03:45:02

标签: c# .net

使用Visual Studio创建应用程序的一个主要问题是文档。类或方法的描述很快到Visual Studio中显示的工具提示与MSDN中的文档一样有用。 MSDN中的例子从不存在到混乱和夸大其词。

我要求的是某人提供关于管理表格上图形元素的显示和移动的所有事物的关系/解雇顺序的明确解释(具有极其清晰且记录良好的示例)。目标是在表单上移动图像动画。

应该回答的问题包括:(但不限于)

  1. DrawImage()方法何时绘制?
  2. 时,在单个缓冲表单上
  3. DrawImage()方法何时绘制?
  4. 时,在双缓冲表单上
  5. 在双缓冲表单上触发未显示的缓冲区是什么?
  6. 是否自动将绘制到一个缓冲区的图像也绘制到第二个缓冲区?

  7. 是否需要为每Paint Event次重绘屏幕上的所有图片?

  8. 如何重新绘制FormBackgroundImage

  9. FormInvalidate()触发的事件序列是什么?

  10. FormInvalidateRectangle)触发的事件顺序是什么?
  11. FormUpdate()触发的事件序列是什么?
  12. FormRefresh()触发的事件序列是什么?

  13. DrawImage()和Form之间的关系是什么。Invalidate()?

  14. DrawImage()和Form之间的关系是什么。Update()?
  15. DrawImage()和Form之间的关系是什么。Refresh()?

  16. 可以DrawImage()触发表格Paint Event吗?

  17. 来自Paint Event的人可以安全地调用DrawImage()吗?

  18. 多线程处理Paint Event有哪些陷阱?

  19. 多个线程调用Form有什么陷阱。Invalidate()?
  20. 多个线程调用Form有什么陷阱。Update()?
  21. 多个线程调用Form有什么陷阱。Refresh()?
  22. 调用DrawImage()的多个线程有哪些陷阱?

  23. 系统是否可以触发Form Paint Event以及对动画有何影响?

  24. 基本上,.Net的这方面如何运作以及“最佳做法”是什么?

  25. 请拒绝参考其他类别,技术或方法。我希望在这里可以构建一个明确的答案,以便任何追随者都不需要进一步了解并立即变得富有成效。

    谢谢!

1 个答案:

答案 0 :(得分:0)

当您需要这种细节时,您必须考虑使用像Telerik这样的反编译器来查看相关类的源代码(在本例中为Graphics类)。

关于16到20:多线程无法访问Form,只有创建Form的线程可以在其上执行方法,您必须使用InvokeRequired和Invoke将请求从不同的线程移动到创建Form的线程。见here