Я работаю над приложением C# .Net, которое вызывает в нем несколько раздражающую ошибку. В главном окне есть несколько вкладок, каждая из которых имеет на ней сетку. При переключении с одной вкладки на другую или выборе другой строки в сетке она выполняет некоторую фоновую обработку, и во время этого меню мерцает, когда она перерисовывается (пункты меню «Файл», «Справка» и т. Д., А также значок и название окна).Отключение перерисовки в приложении WinForms
Я попытался отключить перерисовку окна при первом переключении вкладок/строк (сообщение WM_SETREDRAW). В одном случае он работает отлично. В другом случае он устраняет непосредственную ошибку (название/мерцание меню), но между отключением перерисовки и включением ее снова окно «прозрачно» для щелчков мыши - есть небольшое окно (< 1 сек), в котором я могу щелкнуть и это, скажем, выделит значок на моем рабочем столе, как будто приложения не было вообще. Если у меня есть что-то еще, работающее в фоновом режиме (Firefox, скажем), он будет получать фокус при нажатии (и нарисовать часть браузера, например адресную строку.)
Вот код, который я добавил.
m = new Message();
m.HWnd = System.Windows.Forms.Application.OpenForms[0].Handle; //top level
m.WParam = (IntPtr)0; //disable redraw
m.LParam = (IntPtr)0; //unused
m.Msg = 11; //wm_setredraw
WndProc(ref m);
< надрез> - Application игнорирует щелчки в то время как в этом разделе (в одном случае)
m = new Message();
m.HWnd = System.Windows.Forms.Application.OpenForms[0].Handle; //top level
m.WParam = (IntPtr)1; //enable
m.LParam = (IntPtr)0; //unused
m.Msg = 11; //wm_setredraw
WndProc(ref m);
System.Windows.Forms.Application.OpenForms[0].Refresh();
Кто-нибудь знает, если а) есть способ, чтобы решить эту проблему прозрачно-приложения здесь, или б), если я делаю это неправильно в первую очередь, и это должно быть исправлено каким-то другим способом?