作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 C# 编写一个屏幕保护程序,它会慢慢绘制 Sierpinski 三角形。我在递归函数中使用 Thread.Sleep
来减慢绘图速度。但是我需要一种方法允许用户通过移动鼠标、按键等方式退出。由于我的绘图函数是从窗体的 Paint
事件处理程序内部调用的,因此鼠标和键盘事件是仅在绘制整个三角形后才进行处理,这可能需要相当长的时间。如何在递归函数运行时强制表单处理事件? (以及如何避免调用绘图函数的绘图事件导致的无限循环,绘图函数强制事件处理调用绘图事件等?)
最佳答案
那么你可以使用Application.DoEvents
- 但我不确定我会建议它。您很容易遇到重入问题,尤其是在 Paint
事件中。
如果您正在处理 Paint
事件,听起来所有实际工作确实需要在 UI 线程上完成 - 对吗?
另一种方法是创建一个 Bitmap
并在其上绘制,而不是使用 Paint
事件处理程序。您可以在后台线程上执行此操作,定期创建一个新图像,将您到目前为止绘制的图像复制到它上面,绘制下一层(或其他),然后编码到 UI 线程以在 UI 中使用该图像。这将使主 UI 线程空闲以用于事件处理。您根本不需要处理 Paint
事件 - 只需一个 PictureBox
你用它来显示“到目前为止的图像”。不要忘记在处理完旧位图后将其丢弃,以避免内存问题。
关于c# - 如何在递归函数内强制事件处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872231/
我是一名优秀的程序员,十分优秀!