C# - пауза потока во время работы приложения
Я создал 1 приложение для чтения из Excel и отображения этого содержимого в каждом текстовом поле, я использовал концепцию потоковой передачи для ожидания(сна от заданного ввода) для каждой строки для чтения и отображения в текстовом поле.
Вопрос: я хочу приостановить поток во время запуска приложения(во время выполнения), когда мы нажимаем другую кнопку, я пытался со своей стороны, но фокус не приходит к нам.
// To Display in Text box. private void DisplayText() { BoomStubAngle: int BoomStubAngle = 0; for (int i = j; i <= ds.Tables[0].Rows.Count; i++) { string BSAname = ds.Tables[0].Rows[i][BSA].ToString(); txt_BSA.Text = BSAname.ToString(); txt_BSA.Focus(); } BoomForeAngle: int BoomForeAngle = 1; for (int i = j; i <= ds.Tables[0].Rows.Count; i++) { string BFAname = ds.Tables[0].Rows[i][BFA].ToString(); txt_BFA.Text = BFAname.ToString(); txt_BFA.Focus(); } BoomForeHeadEndPressure: int BoomForeHeadEndPressure = 2; for (int i = j; i <= ds.Tables[0].Rows.Count; i++) { string BFname = ds.Tables[0].Rows[i][BFHEP].ToString(); txt_BFHEP1.Text = BFname.ToString(); txt_BFHEP1.Focus(); j++; // Thread sleep Time-From User Input Thread.Sleep(Convert.ToInt32(Stimer)); goto BoomStubAngle; } connclose: connExcel.Close(); } //??Iam not getting focus to this button in run time when thread is running.?? private void button2_Click(object sender, EventArgs e) { startstop = false; //do //{ // Thread.Sleep(1000); //} //while (startstop == true); //DisplayText(); }
Что я уже пробовал:
// To Display in Text box. private void DisplayText() { BoomStubAngle: int BoomStubAngle = 0; for (int i = j; i <= ds.Tables[0].Rows.Count; i++) { string BSAname = ds.Tables[0].Rows[i][BSA].ToString(); txt_BSA.Text = BSAname.ToString(); txt_BSA.Focus(); } BoomForeAngle: int BoomForeAngle = 1; for (int i = j; i <= ds.Tables[0].Rows.Count; i++) { string BFAname = ds.Tables[0].Rows[i][BFA].ToString(); txt_BFA.Text = BFAname.ToString(); txt_BFA.Focus(); } BoomForeHeadEndPressure: int BoomForeHeadEndPressure = 2; for (int i = j; i <= ds.Tables[0].Rows.Count; i++) { string BFname = ds.Tables[0].Rows[i][BFHEP].ToString(); txt_BFHEP1.Text = BFname.ToString(); txt_BFHEP1.Focus(); j++; // Thread sleep Time-From User Input Thread.Sleep(Convert.ToInt32(Stimer)); goto BoomStubAngle; } connclose: connExcel.Close(); } //??Iam not getting focus to this button in run time when thread is running.?? private void button2_Click(object sender, EventArgs e) { startstop = false; //do //{ // Thread.Sleep(1000); //} //while (startstop == true); //DisplayText(); }
Mehdi Gholam
Чтение excel, отображение и потоки не имеют смысла.
vinodh muthusamy
Оставив чтение концепции Excel, я спросил, как приостановить поток, когда приложение находится во время выполнения.
Mehdi Gholam
Вы используете нить.Сон().
vinodh muthusamy
Я не могу получить фокус кнопки во время выполнения
Kenneth Haugland
Вы должны немедленно прекратить использовать GoTo, они создают трудный для чтения и трудно поддерживаемый код. Просто прекрати.
OriginalGriff
В данном случае он использует нить.Сон на потоке пользовательского интерфейса в бесконечном цикле.: вздох:
vinodh muthusamy
Если я прекращу использование goto немедленно, я буду вам сосредоточиться на форме и приостановить поток
vinodh muthusamy
Даже я удалил Гото немедленно. Но все же я не могу сосредоточиться на форме во время выполнения.
Ralf Meier
Извините меня... но для меня весь код не имеет никакого смысла.
Я предлагаю следующее :
- попробуйте объяснить, чего вы хотите добиться
- показать весь соответствующий код - например, я не вижу, где ваш поток инстанцируется и запускается
- если вы работаете в потоке и хотите присвоить новые значения элементам управления приложения, вы должны использовать invoke для этого
- ваше приложение должно оставаться ответственным (это означает , что оно должно быть в состоянии реагировать в любое время)
Ralf Meier
дополнительный :
Если это" только " своего рода попытка, вы должны сначала попробовать ее с помощью таймера (и таймера.ТИК-событие для вашего метода), а не с потоком...
Philippe Mori
Читайте книги, учебные пособия или документацию по многопоточности. Нет смысла делать что-то подобное без глубокого понимания того, как работает резьба.
Если вы хотите приостановить чтение, то вам нужно хотя бы нить и правильное взаимодействие между ними. Существует множество способов сделать это (асинхронный / ожидающий, фоновый рабочий или пользовательские потоки...).
Philippe Mori
Это абсолютно не имеет никакого смысла вообще звонить Thread.Sleep
из потока пользовательского интерфейса, так как ваше приложение перестанет отвечать в течение всего этого времени.