作爲一個學校項目,我們創建了一個C#XNA 4.0遊戲,它可以從Visual Studio 2010本身運行(在Release或Debug中)完美運行。但是,當它建成時,遊戲在某個時候莫名其妙地崩潰。在VS 2010中運行和運行構建的EXE有什麼區別?
該負責代碼部分似乎是這樣的:
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真(這恰好,因爲服務器獲取客戶端)或者時間用完10秒後。當通過VS運行時,這兩件事情都可以很好地工作,但遊戲只是在以構建的EXE運行時停止響應。
這是什麼?!
編輯:我似乎已經找到了修復程序,最後。在上面的while(true)
循環的底部添加Thread.Sleep(1);
似乎可以解決所有問題!不知道爲什麼在運行EXE和從Visual Studio運行之間有所不同,但是嘿它有效。
EDIT2:該網站介紹了我的整個問題:http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/ 的Thread.Sleep只是偶然的一切問題;)
XNA是否真的以這種方式暴露TCP/IP協議棧?這可能是因爲你試圖使用XNA中實際不存在的類。我只隱約回憶幾年前使用XNA,所以,呃... – Frosty840 2011-06-07 08:35:46