Как использовать поток при событии нажатия кнопки в форме Windows?

#c# #multithreading #winforms #backgroundworker

#c# #многопоточность #winforms #backgroundworker

Вопрос:

Я создаю приложение для Windows.

В моем приложении рабочий процесс выглядит следующим образом.

  1. Введите URL целевого сайта в текстовое поле и нажмите кнопку «Пуск».
  2. Сначала сравните URL-адрес сайта в текстовом поле с реальным URL-адресом сайта, если он совпадает, запустите анализ сайта и вставьте в базу данных, затем отобразите эти данные в Datagridviewe в Windows forms.

Но проблема в том… когда информация о сайте большая, иногда форма Windows зависает.. но это работает хорошо….

Итак, я хочу добавить индикатор выполнения и отобразить его, использовать thread или backgroundworker?

Но я никогда не использую поток или что-то подобное… Я не знаю ни малейшего представления об этом…

Пожалуйста, кто-нибудь, помогите мне или дайте несколько советов….

мой код такой. (упростить)

 public partial class Site_Statistics : MetroFramework.Forms.MetroForm

{
    public Site_Statistics()
    {
        InitializeComponent();                        
    }

    private void Migration_Statistics_Load(object sender, EventArgs e)
    {

    }

    private void mtbtnStart_Click(object sender, EventArgs e)
    {            
        insertWebApplicationInfo();

        SelectWebApplicationInfo();
    }

    private void insertWebApplicationInfo()
    {
        //Insert to database works here
    }

    private void SelectWebApplicationInfo()
    {
         //Select from database works here
    }
}
 

Комментарии:

1. Вы пробовали искать учебные пособия? Есть много результатов, если вы просто загуглите «Потоки C #».

2. Да. Я уже сделал это. Но, как я уже говорил, сейчас самое время его использовать, поэтому мне просто нужен совет, как его использовать

Ответ №1:

Вам трудно решить, как вы должны подходить к этой проблеме. Если вы используете .NET 4.5, вы могли бы изучить async await ключевые слова and . Видеоурок:

https://www.youtube.com/watch?v=MCW_eJA2FeY

Если вы «привязаны» к .NET 3.5 или просто хотите узнать об Backgroundworker этом, это отличная возможность, поскольку для подобных сценариев он был создан. Выполнение работы в фоновом потоке, а затем обновление пользовательского интерфейса может быть затруднительным, преимущество использования a Backgroundworker заключается в том, что события (ProgressChanged, RunWorkerCompleted) создаются в потоке пользовательского интерфейса, так что об этом позаботятся за вас. Наконец, несколько общих советов, если вы выберете Backgroundworker :

  • Задача, которую вы хотите выполнить, помещается в событие DoWork
  • Не обновляйте пользовательский интерфейс в событии DoWork, это делается в событиях, вызванных backgroundworker
  • Если вы хотите сообщить о ходе выполнения, не забудьте установить WorkerReportsProgress свойство и сообщить о ходе выполнения в doWork событии
  • Если вы хотите иметь возможность отменить задачу, не забудьте установить WorkerSupportsCancellation свойство и обработать отмену в doWork событии

Для получения дополнительной информации о backgroundworker есть много хороших статей, если вы немного погуглите 🙂

На этой странице msdn содержится вся информация о фоновых работниках, которая может вам понадобиться, включая примеры.

Комментарии:

1. Спасибо вам, Болт и ТДулл. Мне все еще нужно больше практики, но ваша ссылка и объяснение действительно полезны!!! Еще раз спасибо за ваш совет!! 🙂