Прежде всего позвольте мне заверить вас, что в показанном вами фрагменте кода нет ничего плохого - проблема в другом.
Дело в том, что ваша точка останова находится на линии ServerName.Text
, но не на следующей строке, что означает, что эта строка вызывает исключение.
Тот факт, что ваше приложение не разрушает, указывает на то, что это исключение где-то молча проглатывается, обычно это не очень хорошая вещь и что-то, что усложняет поиск и устранение неисправностей (как в вашем случае), поэтому, если это то, что вы можете исправить, я бы рекомендовал вам сделать это.
Одна из вещей, которую вы можете сделать в Visual Studio, это зайти в меню «Отладка» и выбрать пункт «Exceptoins ...». Появившееся диалоговое окно позволит вам убедиться, что отладчик остановится и на проглоченных исключениях, это может пролить некоторый свет на ситуацию и может быть полезным методом отладки.
Первое, что вам нужно сделать, это выяснить, какое исключение выдается. Это даст вам новую информацию для работы. Один из способов выяснить это я объяснил выше, но иногда, когда выдается и вылавливается много исключений, это не очень практично. В этом случае вы можете временно заключить код проблемы в блок try / catch, например:
private void onServerInfo(msgBox message)
{
try
{
serverInfo.info info = (serverInfo.info)message.getMessage("info");
MessageBox.Show(info.name + " ; " + info.type + " ; " + info.limit); // works with everything showing up right
ServerName.Text = info.name; //this is a string
ServerType.Text = info.type.ToString(); // this is a enum
MaxLimit.Text = info.limit.ToString(); // this is a int
MessageBox.Show(ServerName.Text + " ; " + ServerType.Text + " ; " + MaxLimit.Text); // doesnt ever show
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Поставьте точку останова на MessageBox.Show(ex.Message);
и проверьте содержимое исключения. Это позволит вам продвинуться в решении вашей проблемы.
В этот момент мы могли бы остановиться, но давайте подумаем, какие могут быть возможные причины проблемы.
Как заметил кто-то другой, скорее всего проблема в том, что вы пытаетесь получить доступ к элементу пользовательского интерфейса, не являющемуся потоком пользовательского интерфейса, что недопустимо в приложении .NET. Подробнее об этом можно прочитать здесь Как выполнить потоковые вызовы для элементов управления Windows Forms . Основная идея заключается в том, что вам нужно использовать методы InvokeRequired / Invoke в элементах управления вашего пользовательского интерфейса для доступа к ним из другого потока.
Другая возможная причина ошибки может заключаться в том, что по любой причине ваш ServerName
равен нулю.