#c# #multithreading #winforms #backgroundworker
#c# #многопоточность #winforms #backgroundworker
Вопрос:
Я создаю приложение для Windows.
В моем приложении рабочий процесс выглядит следующим образом.
- Введите URL целевого сайта в текстовое поле и нажмите кнопку «Пуск».
- Сначала сравните 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 . Видеоурок:
Если вы «привязаны» к .NET 3.5 или просто хотите узнать об Backgroundworker
этом, это отличная возможность, поскольку для подобных сценариев он был создан. Выполнение работы в фоновом потоке, а затем обновление пользовательского интерфейса может быть затруднительным, преимущество использования a Backgroundworker
заключается в том, что события (ProgressChanged, RunWorkerCompleted) создаются в потоке пользовательского интерфейса, так что об этом позаботятся за вас. Наконец, несколько общих советов, если вы выберете Backgroundworker
:
- Задача, которую вы хотите выполнить, помещается в событие DoWork
- Не обновляйте пользовательский интерфейс в событии DoWork, это делается в событиях, вызванных
backgroundworker
- Если вы хотите сообщить о ходе выполнения, не забудьте установить
WorkerReportsProgress
свойство и сообщить о ходе выполнения вdoWork
событии - Если вы хотите иметь возможность отменить задачу, не забудьте установить
WorkerSupportsCancellation
свойство и обработать отмену вdoWork
событии
Для получения дополнительной информации о backgroundworker
есть много хороших статей, если вы немного погуглите 🙂
На этой странице msdn содержится вся информация о фоновых работниках, которая может вам понадобиться, включая примеры.
Комментарии:
1. Спасибо вам, Болт и ТДулл. Мне все еще нужно больше практики, но ваша ссылка и объяснение действительно полезны!!! Еще раз спасибо за ваш совет!! 🙂