Ok, mon code actuel est en cours et probablement je vais essayer de faire la même chose avec le CTP Async. Mais je vais toujours aimer comprendre ce qui se passe.Le thread appelant ne peut pas accéder à cet objet car un thread différent le possède
J'ai une fonction comme ci-dessous
// In MainWindow.xaml.cs
Task.Factory.StartNew(() => helper.Send());
// In class HttpHelper
public void Send()
{
// ...
try
{
Status = Statuses.Uploading;
// write to request stream
Status = Statuses.Downloading;
// write to response stream
Status = Statuses.Idle; // the exception is thrown here
// ...
}
catch (Exception e)
{
// ...
}
}
complet Code pour HttpHelper
@pastebin. Send()
sur la ligne 76
Je me demande pourquoi je reçois l'exception? Peut-être que j'ai fait quelque chose de mal avec le threading, mais pourquoi l'exception est-elle levée seulement après avoir réussi à définir la propriété Status
2 fois?
MISE À JOUR: La cause ...
J'ai eu un gestionnaire d'événements, écoutant l'événement StatusChanged
, en 1 si l'article, j'ai oublié d'utiliser le thread d'interface utilisateur de mettre à jour l'interface utilisateur
helper.StatusChanged += (s, evt) =>
{
_dispatcher.Invoke(new Action(() => txtStatus.Text = helper.Status.ToString())); // I used _dispatcher here correctly
if (helper.Status == HttpHelper.Statuses.Idle || helper.Status == HttpHelper.Statuses.Error)
progBar.IsIndeterminate = false; // but not here
};
parce que parfois vous obtenez le thread de l'interface utilisateur et parfois vous ne le faites pas .... –