我正在用XNA和Monogame編寫Windows 8 Metro應用程序。 我使用這個代碼文件閱讀:如果讀取文件,Windows 8 Metro App只能在調試器中啓動
文件閱讀:
private void getDoc(String filename)
{
readstate = 0;
try
{
// get the file
//StorageFile myStorageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(filename);
String path = @"birdy2 - win8\XML\XMLFiles\" + filename + ".xml";
StorageFile myStorageFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(path);
var readThis = await FileIO.ReadLinesAsync(myStorageFile);
String txt = "";
foreach (var line in readThis)
{
txt += line.ToString();
}
if (txt.Length > 0)
{
doc = XDocument.Parse(txt);
}
readstate = 1;
}
catch (FileNotFoundException ex)
{
doc = null;
readstate = 2;
}
}
而且我調用該方法:
XDocument gameinfo = null;
try
{
getDoc("gameinfo.xml");
while (readstate == 0) { }
gameinfo = doc;
}
catch { gameinfo = null; }
問題: 如果我調試該應用程序,一切工作正常。 如果我發佈的應用程序,然後我直接從Win8開始屏幕啓動它,該應用程序無法啓動。 我發現
while (readstate == 0) { }
READSTATE從來沒有在釋放狀態得到任何不同比0。但不知道爲什麼。
我很滿意每一個答案。 謝謝!
謝謝你的回答快Nahel! 我重寫了代碼,但它仍然不起作用,和以前一樣。
private async Task<int> getDoc(String filename)
{
try
{
// get the file
StorageFile myStorageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(filename);
var readThis = await FileIO.ReadLinesAsync(myStorageFile);
String txt = "";
foreach (var line in readThis)
{
txt += line.ToString();
}
if (txt.Length > 0)
{
doc = XDocument.Parse(txt);
}
return 1;
}
catch (FileNotFoundException ex)
{
doc = null;
return 2;
}
}
以及加載:
XDocument gameinfo = null;
try
{
Task<int> tsk = getDoc("gameinfo.xml");
int result = tsk.Result;
if (result == 1)
{
gameinfo = doc;
}
else
{
gameinfo = null;
}
}
catch { gameinfo = null; }
更新根據您的新代碼段我的答案。 –