Как я могу использовать функцию AnimateWindow в отдельном потоке?

Как я могу оживить два окна одновременно? Я старался:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern bool AnimateWindow(IntPtr hwnd, int time, int flags);
...

AnimateWindow(panel1.Handle, speed, AW_SLIDE | AW_HOR_Top);
AnimateWindow(panel2.Handle, speed, AW_SLIDE | AW_HOR_Top);

Но панель2 не будет анимирована, пока панель1 не закончит анимацию.

Я должен использовать потоки.. но я не могу, даже если я использовал invoke .. также он запускает 2-ю анимацию после 1-го

так как я могу это сделать?

1 ответ

Если оба окна были созданы одним и тем же потоком, то AnimateWindow функция будет работать в этом потоке. Согласно документации MSDN:

Функция не будет работать в следующих ситуациях:

  • Если поток не владеет окном. Обратите внимание, что в этом случае AnimateWindow не удается, но GetLastError возвращается ERROR_SUCCESS,

Нет другого способа, кроме как создать второе окно в отдельном потоке. Кроме того, вам придется позвонить AnimateWindow функция из потока, в котором было создано каждое окно.

Другие вопросы по тегам