DoubleBuffered Paint DrawImage使更新无效同步与异步的最终解释
本文关键字:异步 解释 同步 DrawImage Paint 更新 无效 DoubleBuffered | 更新日期: 2023-09-27 18:23:56
对我来说,使用Visual Studio创建应用程序的一个主要问题是文档。类或方法的描述是乏味的,以至于Visual Studio中显示的工具提示与MSDN中的文档一样具有信息性。MSDN中的例子从根本不存在到杂乱无章、夸大其词。
我所要求的是有人提供一个明确的解释(用一个非常干净和记录良好的例子),说明与管理表单上图形元素的显示和移动有关的所有事情的关系/激发顺序。目标是在表单上移动动画图像。
应回答的问题包括:(但不限于)
- 在单个缓冲表单上,DrawImage()方法何时绘制
- 在双缓冲窗体上,DrawImage()方法何时绘制
- 在双缓冲窗体上,是什么触发了要显示的未显示缓冲区
-
绘制到一个缓冲区的图像是否也自动绘制到第二个缓冲区?
-
是否需要为每个绘制事件重新绘制屏幕上的所有图像?
-
如何重新绘制Form.BackgroundImage?
-
Form.Invalidate()触发的事件顺序是什么?
- Form.Invalidate(矩形)触发的事件顺序是什么
- Form.Update()触发的事件顺序是什么
-
Form.Refresh()触发的事件顺序是什么?
-
DrawImage()和Form.Invalidate()之间的关系是什么?
- DrawImage()和Form.Update()之间的关系是什么
-
DrawImage()和Form.Refresh()之间的关系是什么?
-
DrawImage()是否可以触发窗体Paint Event?
-
from Paint事件能否安全地调用DrawImage()?
-
与处理Paint Event的多个线程相关的陷阱有哪些?
- 多个线程调用Form.Invalidate()有哪些陷阱
- 多个线程调用Form.Update()有哪些陷阱
- 多个线程调用Form.Refresh()有哪些陷阱
-
多个线程调用DrawImage()有哪些陷阱?
-
系统是否可以触发Form Paint事件,对动画会产生什么影响?
-
基本上,.Net的这一方面是如何运作的,"最佳实践"是什么?
请不要引用其他类、技术或方法。我希望能在这里构建一个明确的答案,这样之后的任何人都不需要进一步搜索来理解并立即变得富有成效。
谢谢!
当你需要这种细节时,你必须考虑使用像Telerik这样的反编译器来查看相关类(在这种情况下是Graphics类)的源代码。
关于16到20:多个线程无法访问一个Form,只有创建Form的线程才能在其上执行方法,您必须使用InvokeRequired和Invoke将请求从另一个线程移动到创建Form的螺纹。请参阅此处