WPF DevExpress Grid 관련 질문입니다.

안녕하세요.

wpf 프로젝트를 하고 있는 개발자입니다. (wpf는 시작한 지 얼마 안되었습니다ㅠ)

아직 내용을 잘 몰라 여기에 질문을 드리게 되었습니다.

주요 내용은 ScrollViewer 이용하여 전체 페이지 화면에서 고객정보를 동적으로 표현하기 위한 화면입니다.

DevExpress를 이용하여 개발하였고 현재 문제가 된 부분은 아래와 같이 고객은 총 7분이 계십니다. 김일동 ~ 김칠동 (총 7명)

화면 맨 하단에 김칠동 고객명을 마우스 클릭하면 포커스가 이동하면서 아래와 같은 에러가 발생하였습니다. 다른 고객명을 누를 시 에러는 나오지 않고 아래와 같이 스크롤에 의해 가려져 있는 고객명을 클릭 시 에러가 발생하고 있습니다.

> 2024-05-20 16:22:38.411: 	디스패처 처리는 일시 중단되었지만 메시지가 여전히 처리되고 있습니다.
> WindowsBase
>    at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
>    at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
>    at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
>    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
>    at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
> WndProcHook
> System.Windows.Threading.Dispatcher	Method:Void App_DispatcherUnhandledException(System.Object, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs) in FileName:C:\DEV\SamgaErpV2.0\erp-cs-v2\Core\Samga\App.xaml.cs: Line:61
> 	Method:Boolean CatchException(System.Exception) in FileName:: Line:0
> 	Method:Boolean CatchExceptionStatic(System.Object, System.Exception) in FileName:: Line:0
> 	Method:Boolean CatchException(System.Object, System.Exception, System.Delegate) in FileName:: Line:0
> 	Method:System.Object TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) in FileName:: Line:0
> 	Method:System.Object LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32) in FileName:: Line:0
> 	Method:IntPtr SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr) in FileName:: Line:0
> 	Method:Int32 MessageBox(System.Runtime.InteropServices.HandleRef, System.String, System.String, Int32) in FileName:: Line:0
> 	Method:Int32 MessageBox(System.Runtime.InteropServices.HandleRef, System.String, System.String, Int32) in FileName:: Line:0
> 	Method:System.Windows.MessageBoxResult ShowCore(IntPtr, System.String, System.String, System.Windows.MessageBoxButton, System.Windows.MessageBoxImage, System.Windows.MessageBoxResult, System.Windows.MessageBoxOptions) in FileName:: Line:0
> 	Method:System.Windows.MessageBoxResult Show(System.String) in FileName:: Line:0

고객정보는 MVVM 방식으로 구현하여 Xaml에 Grid를 구성하여 화면에 조회하였습니다. 그리드 포커스 문제인가 싶어 이것 저것 찾아봤지만 마땅한 내용이 없어
여기에 글을 올리게 되었습니다.

개발환경은 .NET 6.0, DevExpress v21.2.7 입니다.

선배님들 많은 도움 부탁 드립니다.

회사 정책상 코드를 올리진 못한점 양해 부탁 드립니다.

포커스가 변경되거나 선택된 행이 바뀔 때

  • ItemsSource에 버인딩 된 컬랙션을 변경
  • MessageBox를 표시

혹시 위와 같은 동작이 구현되어 있는 상태인가요?

해당 예외의 영문 메시지는 "dispatcher processing has been suspended, but messages are still being processed"로 이를 검색해보면 특정 Dispatcher 메시지 처리 중 ShowDialog()MessageBox.Show() 와 같이 Modal 형태의 창을 띄우는 동작이 있을때 발생하는 예외로 보입니다.

비슷한 오류 유형

구글 검색어

https://www.google.com/search?q=System.InvalidOperationException+dispatcher+suspended+devexpress+grid+scroll

(BCL 예외가 발생한 경우 오류 메시지를 영어로 검색해보면 좀 더 많은 정보를 얻을 수 있습니다. 참고하세요.)

2 Likes

댓글 주셔서 감사합니다. 지금 프로그램 동작은 그리드가 스크롤이 생긴 상황에서 화면 맨 마지막 가려져 있는 칼럼을 마우스로 선택했을 때 나오는 상황입니다.
별도로 바인딩 컬렉션을 변경하거나 메소드를 호출하거나 하는 내용은 없습니다.
그리고 구글 검색을 해보면 BeginInvoke 메소드를 활요하라고 하는데 일부러 포커스 이벤트를 해봐야하는 건지를 모르겠네요…
혹시 이 내용으로 짐작가시는게 있으신지요?
짐작가는게 있으시면 댓글 부탁 드립니다.
감사합니다~

ScrollViewer안에 GridControl이 있을 때 발생한 예외로 인해 MessageBox를 출력하는 중에 발생한 부수적인 오류인 것 같습니다.

아래 링크도 확인해보세요

Can’t scroll a GridControl in a ScrollViewer | DevExpress Support

GridControl - Allow scrolling ScrollView when a GridControl is inside the ScrollView. | DevExpress Support