gpt4 book ai didi

c# - 如何在递归函数内强制事件处理?

转载 作者:行者123 更新时间:2023-11-30 14:44:06 28 4
gpt4 key购买 nike

我正在用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com