C# 当我移动窗口时,我的应用程序执行速度较慢

C# 当我移动窗口时,我的应用程序执行速度较慢,c#,.net,winforms,stopwatch,C#,.net,Winforms,Stopwatch,我的问题在你看来可能很傻,但我意识到移动我的应用程序表单会使其中的代码运行得更慢。例如,当我加载位图图像并对其应用一些图像编辑算法时,整个过程大约需要22秒才能完成。但是如果我在执行过程中移动表单,它会增加3-4秒的额外时间。我能用秒表发现延迟。那么,如果可能的话,我该如何避免这种行为呢?这只是一个假设,需要您进行调查,因为您没有发布任何代码,因此不可能真正知道发生了什么 很可能是将图像的边界移到屏幕外。当您再次移入时,窗口引擎将对要重新绘制的矩形执行一些绘制调用。放大窗口时调整大小也会发生同

我的问题在你看来可能很傻,但我意识到移动我的应用程序表单会使其中的代码运行得更慢。例如,当我加载位图图像并对其应用一些图像编辑算法时,整个过程大约需要22秒才能完成。但是如果我在执行过程中移动表单,它会增加3-4秒的额外时间。我能用秒表发现延迟。那么,如果可能的话,我该如何避免这种行为呢?

这只是一个假设,需要您进行调查,因为您没有发布任何代码,因此不可能真正知道发生了什么


很可能是将图像的边界移到屏幕外。当您再次移入时,窗口引擎将对要重新绘制的矩形执行一些绘制调用。放大窗口时调整大小也会发生同样的情况,但缩小窗口时则不会

如果是这种情况,那么只要不覆盖/揭开图像区域,就不会遇到任何额外的绘制调用

因此,这不是一个答案,但在您的位置上,我将覆盖
Paint()
方法并记录有多少多余的调用。基于此,我会搜索一个解决方案,例如抑制以下调用:

public override void Paint()
{
    if (algorithmRunning)
    {
        return; // suppress any further computations
    }

    base.Paint(); // do actual redraws
}
此代码只是一个示例,您必须根据MSDN文档进行修复

您不应该做的只是挂接到
OnPaint()
事件中,因为这样您仍然可以调用实际的
Paint()
方法