Хорошо, мой текущий код работает, и, вероятно, я попытаюсь сделать то же самое с Async CTP. Но я все равно хочу понять, что происходит.Вызывающий поток не может получить доступ к этому объекту, потому что ему принадлежит другой поток
У меня есть функция, как ниже
// 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)
{
// ...
}
}
Полный код для HttpHelper
@pastebin. Send()
on line 76
Интересно, почему я получаю исключение? Может быть, я сделал что-то не так с потоковой обработкой, но почему исключение возникает только после того, как я успешно установил свойство Status
2 раза?
UPDATE: Причина ...
Я имел обработчик события, прислушиваясь к StatusChanged
события, в 1, если условие, я забыл использовать поток пользовательского интерфейса для обновления пользовательского интерфейса
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
};
потому что иногда вы получаете поток пользовательского интерфейса, а иногда нет. –