2016-12-02 2 views
-1

Я использую фоновые работники VS 2015 для выполнения некоторых задач.Передать переменную RunWorkerCompleted() после выполнения DoWork()

У меня есть DoWork() метод, который использует List<string> myList, и он удаляет каждую запись в списке после завершения определенного процесса. Моя цель - сообщить пользователям, какая запись в myList не была обработана (поскольку она удаляет запись после каждого процесса, все, что осталось в конце, является тем, которое НЕ обрабатывается). Чтобы сделать это, я собирался передать переменную myList в RunWorkerCompleted(), но не только не знаю, как это сделать, я даже не уверен, что это лучший способ сделать это.

Есть ли лучшие способы сообщить пользователям, какая запись в myList не обрабатывалась, а если нет, как передать переменную из DoWork() в RunWorkerCompleted()?

Текущий RunWorkerCompleted() метод:

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    if(e.Error != null) 
    { 
     MessageBox.Show(e.Error.ToString()); 
    } 
    else 
    { 
     MessageBox.Show("Done!"); 
    } 
} 

В принципе, я хочу MessageBox, чтобы отобразить, какие элементы не обрабатываются, когда это делается запуском задачи

+0

Любая причина не использовать async/wait вместо фоновых работников, поскольку это рекомендуемый подход? –

+0

Im начинающий пользователь, поэтому я точно не знаю разницу, но я думал, что асинхронный был для веб-приложения. Mine - это автономный winform (например, не подключение к сети, а не использование сервера) – djskj189

+0

@ djskj189 'async' - полезный инструмент для любого приложения, работающего с асинхронной операцией. Если у вас асинхронная операция, вы можете ее использовать. – Servy

ответ

3

Вы можете использовать результат RunWorkerCompletedEventArgs

См. this

OK Для некоторых людей, которые просто не хотят читать, используйте это

private void bgw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    //Do your work 
    e.Result = mylist; 
} 

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    if(e.Error != null) 
    { 
     MessageBox.Show(e.Error.ToString()); 
    } 
    else 
    { 
     ShowResult(e.Result as List<string>); 
    } 
} 
+0

Пожалуйста, разместите пример кода. Ссылки умирают, но люди все равно придут сюда для ответов. – Archer

+0

Как узнать, какой «результат» является переменной myList? Он также использует другие переменные, и он не похож на тип возврата – djskj189

+0

@Archer Ответ не зависит от ссылки. – Servy