Вы выполняете цикл while()
в потоке пользовательского интерфейса, что означает, что он слишком занят в цикле для обработки ваших входных данных и поэтому зависает.
Быстрый взлом состоял бы в том, чтобы поместить Application.DoEvents()
в цикл. Это говорит потоку пользовательского интерфейса на мгновение остановить то, что он делает, и обработать ожидающие события. Я бы действительно предложил не делать этого, хотя это, вероятно, худший способ, которым вы могли бы поддерживать отзывчивость вашего пользовательского интерфейса.
Зачем вам вообще нужен цикл? Просто сделайте проверку один раз, когда кнопка нажата, и затем предоставьте пользователю свой отзыв.
private void btnAdd_Click(object sender, EventArgs e)
{
ushort operand1;
ushort operand2;
bool validInput = UInt16.TryParse(txtOperand1.Text, out operand1) &&
UInt16.TryParse(txtOperand2.Text, out operand2);
if(!validInput)
{
// MessageBox.Show("not number");
label1.Visible = true;
label1.ForeColor = Color.Red;
label1.Text = "Value must be numeric and > 0";
}
else
{
int result;
result = operand1 + operand2;
label1.Visible = true;
label1.Text = string.Format("{0:N}", result).ToString();
}
}