반응형
WPF에서 Json으로 직렬화와 역직렬화하여 화면에 디스플레이 하다가 UI Thread에선 문제가 없었는데, Task를 태워서 비동기 처리를 하려다 보니 아래와 같은 오류가 발생되었다.
DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다.
처음엔 이게 뭐야??? 하면서 내가 사용한 객체들에 대해 뒤져보게 되었다.
일단 DependencyObject가 같은 Thread에서 나와야 한다는것이 일단 Dispatcher를 이용하면 될것이라는 것은 명확했다.
하지만 어느 부분에서?? 라는 것이 문제였다.
워낙 많은 양의 데이터를 역직렬화하다보니 전체를 감싸기도 애매했다.
그래서 객체에 담긴 모든 데이터를 다 확인해보기 시작했다.
뭐 결론은 Brush다.
https://learn.microsoft.com/ko-kr/dotnet/api/system.windows.media.brush?view=windowsdesktop-7.0
msdn에 가보면 Brush 클래스는 상속레벨이 아래와 같다.
Object
DispatcherObject
DependencyObject
Freezable
Animatable
Brush
이놈이 UI Thread에서 만들어줘야 하는 녀석이였다.
private string _stoke;
public string Stroke
{
get { return _stoke; }
set
{
SetProperty(ref _stoke, value);
Application.Current.Dispatcher.Invoke(() =>
{
BrushStroke = (Brush)new System.Windows.Media.BrushConverter().ConvertFromString(_stoke);
});
}
}
[JsonIgnore]
public Brush BrushStroke { get; set; }
보는것과 같이 Setter에 Dispatcher를 넣어서 UI Thread에 동기화 할수 있도록 처리하였다.
그러니 문제 없었다.
반응형
'프로그래밍 > WPF' 카테고리의 다른 글
[WPF] DataGrid에서 SelectedItems를 ViewModel과 바인딩하는 방법 (0) | 2023.03.27 |
---|---|
[WPF] Converter를 이용한 Binding Image Source (0) | 2023.03.23 |
[WPF] Close popup when mouse leave (0) | 2022.12.20 |
[WPF] Binding SelectedItems (ItemsControl, DataGrid 등) (0) | 2022.12.07 |
[WPF] File Drag & Drop MVVM Pattern using Behavior (0) | 2022.12.07 |