我的问题对你来说可能看起来很愚蠢,但我意识到移动我的应用程序表单会使其中的代码运行得更慢。例如。当我加载位图图像并在其上应用一些图像编辑算法时,整个过程需要大约22秒才能完成。但是如果我在执行期间移动表单,它会为经过的时间增加3-4秒。我能够使用秒表发现延迟。那么,如果可能的话,我怎么能绕过这种行为?
答案 0 :(得分:0)
这只是一个需要您调查的假设,因为您没有发布任何代码,因此无法真正知道发生了什么。
最有可能的是,您将图像边界移到屏幕外。当您再次移入时,窗口引擎将对要重绘的那些矩形执行一些绘制调用。放大时调整大小时会发生同样的情况,但缩小窗口时则不会。
如果是这种情况,只要您不覆盖/揭开图像区域,就不会有任何额外的平局电话。
所以这不是一个答案,但在你的位置,我会覆盖Paint()
方法并记录多少次调用。基于此,我会搜索一个解决方案,例如禁止这样的调用:
public override void Paint()
{
if (algorithmRunning)
{
return; // suppress any further computations
}
base.Paint(); // do actual redraws
}
此代码只是一个示例,您必须根据MSDN文档修复它。
你不应该做的只是加入OnPaint()
事件,因为那时你仍然会调用实际的Paint()
方法。