서버에서받은 데이터를 역 직렬화하기 위해 DataContract
을 사용하는이 Model 클래스를 사용하고 있습니다. 따라서이 두 필드는 Data
과 DataColor
이고 서버에서 Data
을 보내고 어떤 로직을 사용하여 DataColor
을 파생 시켰습니다.크로스 스레드 액세스가 잘못되었습니다.
ModelClass.cs
private double _data;
[DataMember(Name = "data")]
public double Data
{
get { return this._data; }
set
{
SetField(ref _data, value, "Data");
this.DataColor = Util1.GetColorFromData(value);
}
}
private SolidColorBrush _dataColor;
public SolidColorBrush DataColor
{
get { return this._dataColor; }
set { SetField(ref _dataColor, value, "DataColor"); }
}
내가 내 Util1 클래스 함수 중 하나를 호출하고 DataColor
을 설정합니다.
Util1.cs 차례로 다른 클래스를 호출
public static SolidColorBrush GetColorFromData(double data)
{
// apply some logic to get hexColor from data
return Util2.GetSolidColorFromHex(string hexColor);
}
'hexColor
-SolidColorBrush
Util2.cs
GetSolidColorFromHex(string hexColor)
{
return new SolidColorBrush(
Color.FromArgb(
255,
Convert.ToByte(hexaColor.Substring(1, 2), 16),
Convert.ToByte(hexaColor.Substring(3, 2), 16),
Convert.ToByte(hexaColor.Substring(5, 2), 16)
));
}
을 변환하는 Util2 기능은 지금은 돈' 왜 내가 이걸 얻고 있는지 전혀 모른다. SolidColorBrush
개체를 만들려고 할 때 Util2.cs에서오류가 발생했습니다. 여기에 UI 개체를 변경하려고하지 않습니다.
여기서는 Deployment.Current.Dispatcher.BeginInvoke()
을 사용하려고 생각했지만 여기서는 함수에서 값을 반환하기 때문에 Dispatcher를 사용할 수 없다고 생각합니다.
이 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?
나는 이것에 많은 시간을 낭비했고 GetSolidColorFromHex
을 Util2
에서 Util1
으로 이동하려고 시도했습니다. 여전히 성공하지 못했습니다.
Invalid cross thread
을 전달하는 일부 일반적인 방법이나 다른 상황을 전달하는 것은 아닙니다.
감사
오. 그러나 다른 대안은 없습니다. 당신이 얻은 대답은 Util1과 Util2의 로직을 MainPage.xaml.cs와 같은 UI 스레드로 이동시켜 ModelClass.cs에서 호출해야한다는 것입니다. 내가 틀렸다면 나를 바로 잡아주세요. – PratPor
@PratPor 예제를 사용하여 답변을 업데이트했습니다. – Joeb454
매우 놀랍습니다. Afaik 객체는 다른 스레드에서 인스턴스화되어 고정 된 다음 사용되는 스레드로 보내집니다 (고정 이미지의 경우 작동 함). 어쨌든 칫솔이 아닌 단순한 색상만으로 작업 할 수는 없습니까? 또는 다른 스레드에서 두 번째 디스패처를 만들 수 있습니까? 나는 이것이 효과가있을 것 같아요. –