J'ai cette classe de modèle où j'utilise DataContract
pour désérialiser les données reçues du serveur. Donc, il a ces deux champs Data
et DataColor
où Data
est envoyé à partir du serveur et DataColor
en est dérivé en utilisant une certaine logique.Accès à l'accès croisé non valide
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"); }
}
Pour définir DataColor
J'appelle une de mes fonctions de classe Util1.
Util1.cs
public static SolidColorBrush GetColorFromData(double data)
{
// apply some logic to get hexColor from data
return Util2.GetSolidColorFromHex(string hexColor);
}
qui appelle à son tour une autre classe fonction Util2 pour convertir 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)
));
}
Maintenant, je n » Je n'ai même pas la moindre idée de pourquoi je reçois ça 0 Erreurdans Util2.cs lorsque j'essaie de créer l'objet SolidColorBrush
. Je n'essaie pas de changer un objet d'interface utilisateur ici.
Je pensais utiliser Deployment.Current.Dispatcher.BeginInvoke()
ici, mais puisque je renvoie des valeurs de la fonction ici, je ne peux pas utiliser Dispatcher je pense.
J'ai besoin de savoir pourquoi ai-je cette erreur et comment puis-je résoudre ce problème?
J'ai perdu beaucoup de temps à ce sujet et j'ai essayé de déplacer GetSolidColorFromHex
de Util2
à Util1
. Toujours pas de succès.
Il n'y a pas non plus de manière générale d'éviter Invalid cross thread
en passant du contexte ou quelque chose d'autre peut-être.
Merci
Oh. Mais n'y a-t-il pas d'autre alternative. Ce que j'obtiens de votre réponse, c'est que je devrais déplacer la logique de Util1 et Util2 vers un thread d'interface utilisateur comme MainPage.xaml.cs et l'appeler depuis ModelClass.cs. S'il vous plait corrigez moi si je me trompe. – PratPor
@PratPor J'ai mis à jour ma réponse avec un exemple – Joeb454
Je trouve cela assez surprenant. Les objets Afaik sont supposés être instanciables à partir d'autres threads, figés, puis envoyés au thread où ils seront utilisés (cela fonctionne pour les images figées). De toute façon ne pouvez-vous pas simplement travailler avec une simple couleur, plutôt que d'un pinceau? Ou peut-être pouvez-vous créer un second répartiteur sur votre autre thread? Je suppose que cela fonctionnerait. –