我有以下代碼:不能在循環中無效?
for(int I=0;I<10;I++)
{
graphics.DrawImage(image, i*20,50);
invalidate();
}
,但它只是在循環後redrawns。爲什麼?
編輯:我正在做簡單的動作,並希望在每一步後更新。
我有以下代碼:不能在循環中無效?
for(int I=0;I<10;I++)
{
graphics.DrawImage(image, i*20,50);
invalidate();
}
,但它只是在循環後redrawns。爲什麼?
編輯:我正在做簡單的動作,並希望在每一步後更新。
因爲Invalidate
不會立即重新繪製,它只是告訴所需要重繪。方法完成後,程序再次空閒時,將執行重繪。
快速和骯髒的解決方案是Invalidate
調用後添加Application.DoEvents()
,但我會建議重寫邏輯使用計時器或類似的東西,而不是使用循環動畫。
Acutally它的剛剛處理的運動。 for循環移動敵人。 – FlyBoy 2011-02-23 11:40:09
無論如何,通過添加一個表示框架的計時器,您將能夠避免hacky Application.DoEvents,並具有更一致的幀率。正如所寫,您的程序將會盡可能快地繪製這10幀,然後取決於您正在運行的CPU的速度。 – 2011-02-23 11:47:12
因爲它處於一個緊密的循環中,所以直到循環結束後纔會真正處理重繪。你可以迫使它由就像所以無效後加入Application.DoEvents()雖然處理重繪消息:
for(int I=0;I<10;I++)
{
graphics.DrawImage(image, i*20,50);
invalidate();
Application.DoEvents();
}
比我快+1 +1 – 2011-02-23 11:31:19
你爲什麼在意?繪製每幅圖像需要很長時間嗎? – 2011-02-23 11:32:15
你在問錯誤的問題。我不會在這樣的循環中進行更新。告訴我們你真正想要達到的目標,我們會給你一個替代解決方案。 – jgauffin 2011-02-23 11:35:34