обработка ошибок с помощью BackgroundWorker - PullRequest
5 голосов
/ 19 октября 2010

Я знаю, что вы можете обрабатывать ошибки BackgroundWorker в обработчике RunWorkerCompleted, как в следующем коде

var worker = new BackgroundWorker();
worker.DoWork += (sender, e) => 
    { 
        throw new InvalidOperationException("oh shiznit!"); 
    };
worker.RunWorkerCompleted += (sender, e) =>
    {
        if(e.Error != null)
        {
            MessageBox.Show("There was an error! " + e.Error.ToString());
        }
    };
worker.RunWorkerAsync();

Но моя проблема заключается в том, что я все еще получаю сообщение: ошибка была выведена из кода пользователя в строке

 throw new InvalidOperationException("oh shiznit!"); 

Как мне решить эту проблему?

Ответы [ 2 ]

10 голосов
/ 19 октября 2010

Вы получаете его, потому что у вас есть отладчик. Попробуйте запустить приложение без отладчика: не сработало исключение, и когда работник завершит операцию, покажет вам MessageBox.

1 голос
/ 19 октября 2010

Я не могу воспроизвести ошибку.Следующее работает отлично:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var worker = new BackgroundWorker();
        worker.DoWork += (s, evt) =>
        {
            throw new InvalidOperationException("oops");
        };
        worker.RunWorkerCompleted += (s, evt) =>
        {
            if (evt.Error != null)
            {
                MessageBox.Show(evt.Error.Message);
            }
        };
        worker.RunWorkerAsync();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...