Как заблокировать поток, но оставить графический интерфейс отзывчивым - PullRequest
2 голосов
/ 25 марта 2012

У меня есть метод, который обновляет richtextbox при запуске. Я должен вызвать этот метод несколько раз, не блокируя графический интерфейс. После завершения вызова и заполнения richtextbox я должен заблокировать поток, чтобы показать некоторую информацию пользователю (следующие вызовы метода не должны начинаться). Я сделал это с помощью MessageBox.Show ().

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

1 Ответ

1 голос
/ 25 марта 2012

Да, это проблема многопоточности.Есть много способов достичь этого.Вот объяснение того, что такое многопоточность. Что такое многопоточность?

Кроме того, вот мой любимый учебник по многопоточности: albahari.com

Потоки имеют свой собственный стек иработать самостоятельно.Вот один пример того, как порождать поток:

Thread _thread = new Thread(() => { MessageBox.Show("Hello world!", "Spawned in a different thread"); });

_thread.Start();

Чтобы вызвать ваш richtextbox из другого потока, один из способов сделать это - создать внутри формы метод, который добавляет текст в текстовое поле, вызывая его,Вот пример того, как это сделать:

public void AddText(string Text)
{
    if (this.textBox1.InvokeRequired)
    {   
       SetTextCallback d = new SetTextCallback(AddText); // Delegate
       this.Invoke(d, new object[] { text });
    }
    else { this.textBox1.AppendText(text); }
}

Вот ссылка MSDN на то, что вы пытаетесь сделать:

http://msdn.microsoft.com/en-us/library/ms171728.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...