作为一个学校项目,我们创建了一个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