Windows Forms: использование BackgroundImage замедляет рисунок средств управления Формы

перебирая ключи и значения вашего sums словаря, чтобы создать новый список со всеми amicable numbers решает проблему, вот фрагмент кода.

amicable_list=[]
for i in sums.keys():
    if i in sums.values():
        if (sums.get(sums.get(i,-1),-1) == i) and (i != sums[i]):
            amicable_list.append(i) 
27
задан Peter Mortensen 24 December 2012 в 23:17
поделиться

2 ответа

SuspendLayout () и ResumeLayout () не приостанавливают рисование, только операции макета. Дайте этому парню шанс:

public static class ControlHelper
{
    #region Redraw Suspend/Resume
    [DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
    private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
    private const int WM_SETREDRAW = 0xB;

    public static void SuspendDrawing(this Control target)
    {
        SendMessage(target.Handle, WM_SETREDRAW, 0, 0);
    }

    public static void ResumeDrawing(this Control target) { ResumeDrawing(target, true); }
    public static void ResumeDrawing(this Control target, bool redraw)
    {
        SendMessage(target.Handle, WM_SETREDRAW, 1, 0);

        if (redraw)
        {
            target.Refresh();
        }
    }
    #endregion
}

Использование должно быть достаточно понятным, а синтаксис идентичен SuspendLayout () и ResumeLayout () . Это методы расширения, которые будут отображаться в любом экземпляре Control.

43
ответ дан 28 November 2019 в 04:59
поделиться

Для меня сообщение Загрузка формы происходит медленно, если добавление фонового изображения решило проблему:

Убедитесь, что ваш цвет фона не установлен на «прозрачный». Установите «белый» для лучшей производительности.

Также сделайте BackgroundImageLayout либо «Center», либо « Stretch » для повышения производительности. Это включит двойной буфер в форме.

1
ответ дан 28 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: