Я написал собственный элемент управления, который отображает некоторую графику. Сама графика довольно дорогая, но после ее рендеринга она редко меняется. У меня есть проблема в том, что если вы перемещаете мышь очень быстро над графикой поверхности он продолжает называть перекрытый метод Paint элемента управления, который затем берет на себя высокий штраф CPU:C# OnPaint mousemove high cpu
частных недействительного UserControl1_Paint (объект отправитель, PaintEventArgs е)
Какие методы можно использовать, чтобы избежать этой ситуации или свести к минимуму ненужное перерисовку, так как графика/изображение под указателем мыши фактически не меняется?
спасибо за ответы. Я должен был добавить, что я использую control.Invalidate, когда я знаю, что что-то изменилось. Метод Paint вызывается .NET (not me!), Когда мышь перемещается. –
OnPaint не вызывается, когда мышь перемещается над элементом управления, что-то происходит. –
Я просто протестировал с простым проектом, чтобы убедиться, и Paint не вызывается движением мыши, если я не вызову Invalidate в OnMouseMove (как упоминают другие здесь). Вы уверены, что в коде нет какого-либо другого условия, которое делает вызовы недействительными, когда их не следует вызывать? Попытайтесь добавить некоторый код регистрации, чтобы регистрировать вызовы для отмены и перемещения мыши и посмотреть, вызваны ли они так, как вы намереваетесь. – rslite