0
我有一個圖形WinForms控件的兩個實例。該圖形由DirectX渲染,並可能包含動畫內容。Winforms飢餓控制失效
我開始通過實施不斷呈現的內容:
public override void OnPaint(...)
{
base.OnPaint(...);
// Render scene
this.Invalidate();
}
而且CPU佔用率過高,這種方法會導致其他控件的無效的飢餓:一個控件的是一次又一次的重新描繪和其它控制等待爲CPU執行失效請求,這是永遠不會發生的(除非以某種方式強制它像調整窗口大小)。
所以我刪除'this.Invalidate()'調用,只有在需要刷新時調用它。當沒有動畫顯示時它確實解決了問題,但是如果兩個控件都顯示動畫內容,則問題再次出現。
我想過在一個集中式管理器中管理應用程序中的所有控件,它將「調度」循環法中的無效調用。然而,我並不滿意在一個集中的位置需要了解應用程序中的所有控件,我不確定這是否是解決問題的正確方法。
有沒有解決這個問題的標準方法?
感謝您的回覆,很高興知道我的實施不符合標準。然而,當使用動畫時,在渲染每幀之後立即一次又一次地失效導致更平滑的動畫(並且我有一些客戶注意到不同之處......)。因爲動畫是短時間的,所以我可以通過渲染這種方式並使用CPU,但我仍然不希望動畫控件會導致其他控件捱餓。有沒有辦法做到這一點? – MaMazav
@MaMazav:就像我說的,使用計時器。假設你想以20fps刷新。因此,創建一個計時器,將間隔設置爲1000/20 = 50ms,並在Tick事件中調用「Invalidate」。 –