Sigmond Gatt Ответов: 1

Потоковая передача в visual studio C# winforms


Всем привет,

мне нужен кто-то, кто поможет мне сделать следующее :

private void btnChangeLength_Click(object sender, EventArgs e)
       {
          <pre>   ComboBox senderComboBox = (ComboBox)sender;
               if (senderComboBox.SelectedIndex > -1)
               {
                   spinner.show();



                   await Task.Run(() => LoadInstitutions());

                   spinner.hide();
                }

//КОД ДЛЯ ГЕНЕРАЦИИ НОВОЙ ДЛИНЫ
}



Мне нужно сделать несколько потоков, поэтому я буду показывать спиннер, пока код не будет готов.

Что я уже пробовал:

private void LoadInstitutions()
       {
          this.Invoke((MethodInvoker)delegate ()
           {
               string selectedValue = cmbEnviroment.SelectedItem.ToString().Trim();
               ConnectionClass connectionClass = new ConnectionClass();
               connectionClass.Connection(selectedValue);
            //more code to do




Может ли кто-нибудь помочь мне сделать резьбу правильно ?

Richard MacCutchan

Как вы думаете, зачем вам нужна резьба?

lw@zi

Вам нужно показать код, который вы пробовали. Очень маловероятно, что кто-то будет делать вашу работу здесь за вас.

Sigmond Gatt

я сделаю это через минуту.

lw@zi

Теперь вы показываете spinner на экране в потоке пользовательского интерфейса до тех пор, пока обработка не будет завершена. Это означает, что пользователь не сможет выполнить никаких дальнейших действий до тех пор, пока обработка не будет завершена. Если это так, то вам вообще не нужна резьба. Кроме того, как может отправитель по combobox, когда обработчик событий появляется для нажатия кнопки?

Richard MacCutchan

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

Sigmond Gatt

я постараюсь это сделать :) спасибо

1 Ответов

Рейтинг:
1

OriginalGriff

Как предложил Ричард, используйте ProgressBar - если вы сочетаете это с BackgroundWorker[^] тогда это становится довольно тривиальным, так как рабочий предоставляет прогресс и завершенные события, которые обрабатываются в потоке пользовательского интерфейса, чтобы вы могли напрямую получить доступ к панели прогресса и обновить ее статус.


Sigmond Gatt

есть ли хороший учебник, которому я могу следовать ? и мне не нужна резьба с backgroundworker, верно ?

OriginalGriff

Класс BackgroundWorker инкапсулирует потоковую обработку, чтобы упростить ее для вас - это простой способ выполнить обработку в новом потоке, в то время как ваш прогресс будет сообщаться в исходном потоке пользовательского интерфейса через события. Просто перейдите по ссылке в ответе, и она включает в себя пример с описанием.