Bckground
У меня есть сетевое приложение, написанное на C #. моя серверная программа имеет пользовательский интерфейс и несколько потоков связи, которые читают из сокетов tcp и отображают сообщения на пользовательском интерфейсе контроллера.
Связь с каждым клиентом осуществляется через отдельный поток. Когда я получаю некоторый поток сообщений от одного клиента, поток для этого клиента пишет в пользовательском интерфейсе, который представляет собой richtextbox в форме.
Я вызываю метод SetTextHelper (string text) формы.
, который выглядит так
private delegate void MyTextUpdateHandler(string text);
public void SetTextHelper(string text)
{
BeginInvoke(new MyTextUpdateHandler(SetText), new object[] { text });
}
public setText(string text)
{
richtext.Text+= text;
}
Вопрос
- Если я использую BeginInvoke, мой пользовательский интерфейс полностью не отвечает, когда я пишу большой поток данных в пользовательский интерфейс
- Invoke решает эту проблему, но я читал, что для многопоточной среды, где многие хосты совместно используют один и тот же ресурс, Invoke может привести к взаимоблокировкам. Я разделяю общую таблицу ichtextbox между 16 потоками
- Что было бы хорошим дизайном для моей ситуации?