Необработанное исключение System.Reflection.TargetInvocationException и BackgroundWorker

210
09 января 2018, 11:40

Изучаю BackgroundWorker, решил попробовать на своей программе (при проверке обновлений), добавив BackgroundWorker. Вроде сделал всё примерно как на msdn, но программа сразу же вылетает. В отладке написано: Что я сделал не так, я не понимаю.

Проверка обновлений идёт через MySQL, некоторые личные части кода стёр.

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace mpapp
{
    /// <summary>
    /// Логика взаимодействия для Updater.xaml
    /// </summary>
    public partial class Updater : Window
    {
        string sqlconn = "---";
        const string this_version = "3900";
        string act_version;
        private BackgroundWorker bw;
        public Updater()
        {
            InitializeComponent();
            InitializeBackgroundWorker();
        }
        private void InitializeBackgroundWorker()
        {
            bw.DoWork += new DoWorkEventHandler(bw_DoWork);
            bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
            bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
        }
        private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            pb.Value = e.ProgressPercentage;
        }
        async private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (act_version == this_version)
            {
                upd_info.Text = "Обновлений нет.";
                await Task.Delay(3000);
                Window login = new Login();
                Close();
                login.Show();
            }
            else
            {
                upd_info.Text = "Есть обновление.";
            }
        }
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            if (!File.Exists("---") | !File.Exists("Mysql.Data.dll"))
            {
                MessageBox.Show("Error", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                error_exit();
            }
            try
            {
                MySqlConnection conn = new MySqlConnection(sqlconn);
                string sql = "SELECT ver FROM versions WHERE id = 3";
                conn.Open();
                MySqlCommand com = new MySqlCommand(sql, conn);
                act_version = com.ExecuteScalar().ToString();
                conn.Close();
            }
            catch (Exception exept)
            {
                MessageBox.Show(exept.ToString());
                error_exit();
            }
            if (bw.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            e.Result = act_version;
        }
        private void minimize_Click(object sender, RoutedEventArgs e) => WindowState = WindowState.Minimized;
        private void exit_Click(object sender, RoutedEventArgs e) => Environment.Exit(0);
        private void MoveForm_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) => DragMove();
        async private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            await Task.Delay(3000);
            bw.RunWorkerAsync();
        }
        async static public void error_exit()
        {
            await Task.Delay(3000);
            Environment.Exit(0);
        }
    }
}
READ ALSO
С# Есть ли действительно удобный способ парсинга html?

С# Есть ли действительно удобный способ парсинга html?

Почему все способы парсинга html на с# такие сложные и запарные? Очень долго программировал на ahk, и там можно в одну строку запарсить classname просто...

285
Не доверять File.Exists() и использовать try/catch?

Не доверять File.Exists() и использовать try/catch?

На одной из страниц форума https://stackoverflowcom/a/6186400/2948684, где идет обсуждение if/else vs

219
Проверка TextBox&#39;ов на пустоту

Проверка TextBox'ов на пустоту

Использую для проверки на пустоту такой способ

239
В чем суть проверки if (bouncers[index] ==null)&hellip;?

В чем суть проверки if (bouncers[index] ==null)…?

Само выражение выглядит как if (bouncers[index] == null)Вопрос, для чего происходит такая проверка?

212