0 / 0 / 0
Регистрация: 30.09.2016
Сообщений: 61

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

04.04.2019, 20:13. Показов 2572. Ответов 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
913 / 817 / 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
913 / 817 / 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru