Изучаю 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);
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Почему все способы парсинга html на с# такие сложные и запарные? Очень долго программировал на ahk, и там можно в одну строку запарсить classname просто...
На одной из страниц форума https://stackoverflowcom/a/6186400/2948684, где идет обсуждение if/else vs
Само выражение выглядит как if (bouncers[index] == null)Вопрос, для чего происходит такая проверка?