Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 61

Как реализовать многопоточность? Нужно чтобы сначало отобразилось Label2 и только после этого выполнился SQL запрос

04.04.2019, 20:13. Показов 2525. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                label2.Visible = true;
                SqlConnection ThisConnection = new SqlConnection(@"Соединение с сервером");
                ThisConnection.Open();
                SqlCommand thisCommand = ThisConnection.CreateCommand();
                thisCommand.CommandText = "select * from Keys where [Key] = '" + textBox1.Text + "'";
                SqlDataReader thisReader = thisCommand.ExecuteReader();
 
                while (thisReader.Read())
                {
                    key += thisReader["Key"];
                    type += thisReader["Type"];
                    use += thisReader["Use"];
                }
                //Условия на действительность ключа.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.04.2019, 20:13
Ответы с готовыми решениями:

Нужно, чтобы отобразилось окно с запросом о сохранении этого файла БЕЗ открытия самого файла
Всем привет! У меня вопрос: Я использую следующую строку window.open(filepath.xls) для передачи файла клиенту, но при этом мне нужно, чтобы...

как проверить с поддержкой средств SQL, выполнился ли запрос ?
пишу процедуру возникает нужда проверить выполнился ли запрос INSERT. как это можно сделать в процедуре ?

Как построить SQL-запрос, чтобы он выводил записи только за сегодня или только за вчерашний день?
В БД есть поле с датой и временм записи. Как построить SQL-запрос, чтобы он выводил записи только за сегодня или только за вчерашний...

5
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
05.04.2019, 02:47
Возможно у Вас приложение однопоточно, пока цикл while не завершит работу окно будет в зависшем состоянии
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                label2.Visible = true;
                ///////////////////////////////////////////////////////////////////// блок ниже вывести в отдельный поток
                /// блок1
                SqlConnection ThisConnection = new SqlConnection(@"Соединение с сервером");
                ThisConnection.Open();
                SqlCommand thisCommand = ThisConnection.CreateCommand();
                thisCommand.CommandText = "select * from Keys where [Key] = '" + textBox1.Text + "'";
                SqlDataReader thisReader = thisCommand.ExecuteReader();
 
                while (thisReader.Read())
                {
                    key += thisReader["Key"];
                    type += thisReader["Type"];
                    use += thisReader["Use"];
                }
                //Условия на действительность ключа.
                /// блок1
                /////////////////////////////////////////////////////////////////////////////////////////////////////////////
Добавлено через 5 минут
P.S. чтобы получить доступ к контролу из потока вот один из способов описанный в этой теме пример:
C#
1
2
3
4
if (textBox1.InvokeRequired) textBox1.Invoke(new Action<string>((s) => textBox1.Text = s), newText);
else textBox1.Text = newText;
if (textBox1.InvokeRequired) textBox1.Invoke(new Action(() => textBox1.Text = "Text"));
else textBox1.Text = Text;
1
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
05.04.2019, 11:26
Лучший ответ Сообщение было отмечено race99 как решение

Решение

Все таки решил довести до ума:
Вариант1:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Task task;
private void Button1_Click(object sender, EventArgs e)
{
   label2.Visible = true;
   task = new Task(new Action(Method));
   task.Start();
}
private void Method()
{
   SqlConnection ThisConnection = new SqlConnection(@"Соединение с сервером");
   ThisConnection.Open();
   SqlCommand thisCommand = ThisConnection.CreateCommand();
   thisCommand.CommandText = "select * from Keys where [Key] = '" + textBox1.Text + "'";
   SqlDataReader thisReader = thisCommand.ExecuteReader();
 
   while (thisReader.Read())
   {
        key += thisReader["Key"];
        type += thisReader["Type"];
        use += thisReader["Use"];
   }
   // По желанию делаем доступ к контролу, тем самым оповестив себя о завершении метода
}


Вариант2:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Thread th1;
private void Button1_Click(object sender, EventArgs e)
{
   label2.Visible = true;
   th1 = new Thread(new ThreadStart(Method));
   th1.Start();
}
private void Method()
{
   SqlConnection ThisConnection = new SqlConnection(@"Соединение с сервером");
   ThisConnection.Open();
   SqlCommand thisCommand = ThisConnection.CreateCommand();
   thisCommand.CommandText = "select * from Keys where [Key] = '" + textBox1.Text + "'";
   SqlDataReader thisReader = thisCommand.ExecuteReader();
 
   while (thisReader.Read())
   {
        key += thisReader["Key"];
        type += thisReader["Type"];
        use += thisReader["Use"];
   }
   // По желанию делаем доступ к контролу, тем самым оповестив себя о завершении метода
}
1
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
05.04.2019, 11:35
C#
1
2
3
4
5
6
7
8
9
10
private void Button1_Click(object sender, EventArgs e)
{
  ThreadPool.QueueUserWorkItem((o) =>
       {
        BeginInvoke(new Action(() => { label2.Visible = true; }));
        Method();
    }
  });
 
}
1
0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 61
05.04.2019, 13:44  [ТС]
Цитата Сообщение от bloomder Посмотреть сообщение
Thread th1; private void Button1_Click(object sender, EventArgs e) { label2.Visible = true; th1 = new Thread(new ThreadStart(Method)); th1.Start(); } private void Method() { SqlConnection ThisConnection = new SqlConnection(@"Соединение с сервером"); ThisConnection.Open(); SqlCommand thisCommand = ThisConnection.CreateCommand(); thisCommand.CommandText = "select * from Keys where [Key] = '" + textBox1.Text + "'"; SqlDataReader thisReader = thisCommand.ExecuteReader(); while (thisReader.Read()) { key += thisReader["Key"]; type += thisReader["Type"]; use += thisReader["Use"]; } // По желанию делаем доступ к контролу, тем самым оповестив себя о завершении метода }
Спасибо этот метод работает. Но тут такой вопрос. Как после завершения потока th1 скрыть Label2?
C#
1
label2.Visible = false;
При использовании этого кода в конце потока вылазит ошибка:

System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label2' не из того потока, в котором он был создан."
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
05.04.2019, 15:03
Лучший ответ Сообщение было отмечено race99 как решение

Решение

Цитата Сообщение от race99 Посмотреть сообщение
"Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label2' не из того потока, в котором он был создан."
Решение:
C#
1
BeginInvoke(new Action(() => { label2.Visible = true; }));
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.04.2019, 15:03
Помогаю со студенческими работами здесь

Определить, выполнился ли запрос SQL
$DBH-&gt;query('UPDATE acc SET activation=&quot;true&quot; WHERE activation=&quot;'.$code.'&quot;', PDO::FETCH_OBJ); Как определить, обновил ли запрос хоть одну...

Как сделать чтобы после нажатия RadioButton в Label2 автоматически вносилось произведение RadioButton на Label1
Как сделать чтобы после нажатия RadioButton в Label2 автоматически вносилось произведение RadioButton на Label1. Только есть одно...

Как сделать чтобы после нажатия RadioButton в Label2 автоматически вносилось произведение RadioButton на Label1
Как сделать чтобы после нажатия RadioButton в Label2 автоматически вносилось произведение RadioButton на Label1. Что-то типо этого: ...

SQL и ComboBox в Delphi. Нужно чтобы при выборе специальности в комбобоксе это значение вносилось в SQL запрос
procedure TForm3.Button2Click(Sender: TObject); begin try ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT Абитуриент.фамилия,...

Вместо того, чтобы выполнился запрос на обновление данных в таблице, показывается первая форма
Код: &lt;? if (isset($_POST)) { $query = $this-&gt;db-&gt;where('NickName', $_POST); $query =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru