Приостановите перерисовку Windows Form

cmds.polyColorPerVertex() принимает кортеж rgb в форме (r, g, b), где каждый элемент должен иметь значение float в диапазоне [0, 1].

«Оттенки серого» в данном контексте просто означает, что r == g == b.

Соответственно, мы можем просто использовать генераторы случайных чисел Python для достижения этой цели:

brightness = np.random.rand() # generates a random float in the range [0, 1]
rgb = (brightness, brightness, brightness)

cmds.polyColorPerVertex(rgb=rgb)
5
задан Keng 17 March 2009 в 15:22
поделиться

2 ответа

Существует несколько вещей, которые можно попробовать:

Во-первых, попытайтесь установить свойство DoubleBuffer DataGridView к истинному. Это - свойство на фактическом экземпляре DataGridView, не Форма. Это - защищенное свойство, таким образом, необходимо будет разделить сетку на подклассы для установки его.

class CustomDataGridView: DataGridView
{
    public CustomDataGridView()
    {
        DoubleBuffered = true;
    } 
}

Я видел, что много маленьких обновлений ничьей требует времени с DataGridView на некоторых видеокартах, и это может решить Вашу проблему путем пакетной обработки их, прежде чем они будут отосланы для дисплея.


Другой вещью, которую можно попробовать, является сообщение Win32 WM_SETREDRAW

// ... this would be defined in some reasonable location ...

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(HandleRef hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);

static void EnableRepaint(HandleRef handle, bool enable)
{
    const int WM_SETREDRAW = 0x000B;
    SendMessage(handle, WM_SETREDRAW, new IntPtr(enable ? 1 : 0), IntPtr.Zero);
}

В другом месте в Вашем коде Вы имели бы

HandleRef gh = new HandleRef(this.Grid, this.Grid.Handle);
EnableRepaint(gh, false);
try
{
    this.doStuff();
    this.doOtherStuff();
    this.doSomeReallyCoolStuff();
}
finally
{
    EnableRepaint(gh, true);
    this.Grid.Invalidate(); // we need at least one repaint to happen...
}
9
ответ дан 14 December 2019 в 01:18
поделиться

Можно попытаться установить форму для использования DoubleBuffer. Установите Форму. Свойство DoubleBuffer к истинному, и это должно решить Вашу проблему.

0
ответ дан 14 December 2019 в 01:18
поделиться
Другие вопросы по тегам:

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