#c#-4.0
#c #-4.0
Вопрос:
В моем проекте у меня есть класс «C1», где я постоянно прослушиваю клиентов, если от клиента получено какое-либо сообщение, мне нужно обновить текст моего текстового поля в классе формы. Я использую делегат для этого, созданный в классе «C1», и я использовал его в своей форме.cs в этой функции я обновляю свое текстовое поле.
Пожалуйста, помогите мне
Комментарии:
1. От вас недостаточно информации. Как вы слушаете клиентов? Использование HttpWebRequest?
Ответ №1:
Похоже, вам нужно использовать Invoke
при назначении Text
свойства вашего текстового поля, поскольку обновления элементов пользовательского интерфейса разрешены только из основного потока пользовательского интерфейса, и вы, вероятно, получаете свои сообщения TCP в другом потоке.
Вы могли бы сделать что-то вроде следующего:
private void UpdateText(string text)
{
if (textBox1.InvokeRequired)
textBox1.Invoke(new Action(() => UpdateText(text)));
else
textBox1.Text = text;
}
который проверит, вызывается ли метод в потоке пользовательского интерфейса, и, если нет, передаст запрос в поток пользовательского интерфейса перед обновлением текста. Если вам нужно асинхронное поведение, вы можете использовать textBox1.BeginInvoke
вместо textBox1.Invoke
.
Для получения дополнительной информации см., Например, Эту статью MSDN.
Комментарии:
1. но я получаю данные в другом классе, оттуда я использую делегат для обновления текстового поля, появляется ошибка, пожалуйста, помогите мне
2. Можете ли вы опубликовать часть кода, показывающего, как вы в настоящее время выполняете это обновление?
3. Мой класс не наследует класс Form, но я вызываю список класса Form из обычного класса c # с помощью делегатов, как я могу это сделать