Внутри класса у меня есть TextBox:
public class TextBoxAdapter {
private System.Windows.Forms.TextBox textBox;
//...some code that initializes the textBox...
public string getTextFromBox() {
if( textBox.InvokeRequired )
return (string)textBox.Invoke( (Func<string>)delegate { return textBox.Text; } );
else
return textBox.Text;
}
}
Для безопасного доступа к этому TextBox из другого потока, я бы хотел использовать механизм Invoke.Но функция getTextFromBox()
завершается ошибкой в строке, где используется Invoke()
.Я проверил это, поставив точку останова на этой строке и нажав F10 (шаг).Это терпит неудачу без исключения.Есть ли ошибка при моем способе вызова?
Редактировать
Почему мне нужно получить доступ к текстовому полю из другого потока?Я пытаюсь создать новую тему при каждом нажатии кнопки, чтобы предотвратить зависание моего интерфейса.Например, в окне входа пользователя в систему при нажатии кнопки входа в систему запускается новый поток, который уведомляет об этом и наблюдатель.Затем наблюдатель хочет прочитать значения текстового поля имени пользователя и пароля, чтобы проверить, является ли логинтри действительным.
Странная вещь в этом: запись в текстовое поле работает без каких-либо проблем.Код, который я использую:
if ( textBox.InvokeRequired ) {
MethodInvoker setText = new MethodInvoker( () => {
textBox.Text = text;
} );
textBox.BeginInvoke( setText );
}
else {
textBox.Text = text;
}