Я пытался следовать этому MSDN example и используя приведенный ниже код. Тем не менее, e.Error
ВСЕГДА имеет значение null в RunWorkerCompleted, даже если в SomeMethod() произошла ошибка;Ошибка захвата BackgroundWorker
private void WorkerDoWork(object sender, DoWorkEventArgs e)
{
getMethod = SomeMethod();
}
private void Worker_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
var result = ModernDialog.ShowMessage("Error occurred.... " +
e.Result, "ErrorTitle", MessageBoxButton.OK);
}
else if (e.Cancelled)
{
}
Else
{
}
}
Может ли кто-нибудь увидеть, что я делаю неправильно?
Я могу обойти это, выполнив следующее, но я не совсем понимаю, почему пример в MSDN не работает для меня?
private void WorkerDoWork(object sender, DoWorkEventArgs e)
{
try
{
getMethod = SomeMethod();
}
catch(Exception ex)
{
e.Result = ex;
}
}
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Result is Exception)
{
var result = ModernDialog.ShowMessage("Error occurred.... " + e.Result, "ErrorTitle", MessageBoxButton.OK);
}
//etc
}
Также, используя второй метод, я не могу получить доступ к .Message из e.Result. Например, в WorkerDoWork я могу использовать ex.Message
Редактировать: я установил рабочий для создания собственной ошибки, и я все равно получаю e.Error == null. Переменный отображаются немного тусклая, как CTRL + PrtSc делает увядает
В WinForms я не могу дублировать проблему. Вы уверены, что не попадаете в эту ошибку? – LarsTech
Определенно не поймать ошибку, SomeMethod(); не содержит попыток, выписок catch. Это в приложении WPF, если это имеет значение? – user3357963
Взгляните на [мой вопрос] (http://stackoverflow.com/questions/19793377/servicecontroler-getservices-silently-bailing-in-a-background-thread), который может быть relivent. – gunr2171