В качестве школьного проекта мы создали игру C # XNA 4.0, которая отлично работает при запуске (в версии или в отладке) из самой Visual Studio 2010.Однако при сборке игра необъяснимым образом вылетает в определенный момент.
Ответственная часть кода выглядит следующим образом:
while( true )
{
if( Client.readInfo )
{
t.Stop();
t.Dispose();
// Save last good IP to file
string toWrite = IPinput.filledIn;
using( StreamWriter file = new StreamWriter( "multiplayer.dat", false ) )
{
file.WriteLine( toWrite );
}
ExitScreen();
using( LobbyScreen screen = new LobbyScreen( c ) )
{
screenManager.AddScreen( screen );
}
break;
}
else if( itTookToLong )
{
Client.killMe = true;
IPinput.Text = "Server IP: ";
IPinput.filledIn = "";
break;
}
}
Это ожидает, пока запущенный клиентский поток не сделает общедоступную статическую статическую.атрибут readInfo true (что происходит, потому что сервер получает клиента) или таймер истекает через 10 секунд.Обе вещи прекрасно работают при запуске через VS, но игра просто перестает отвечать при запуске как встроенный EXE.
Что бы это могло быть ?!
Редактировать: Кажется, я уже нашел исправление, НАКОНЕЦ.Добавление Thread.Sleep(1);
внизу вышеуказанного цикла while(true)
, похоже, решает все проблемы!Не знаю, почему это отличается от запуска EXE и запуска из Visual Studio, но эй, это работает.
Edit2: Этот сайт объясняет всю мою проблему: http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/ Thread.Sleep просто случайно все исправил;)