Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows 8 Metro应用程序仅在文件被读取时在调试器中启动_C#_Windows 8_Xna_Async Await - Fatal编程技术网

C# Windows 8 Metro应用程序仅在文件被读取时在调试器中启动

C# Windows 8 Metro应用程序仅在文件被读取时在调试器中启动,c#,windows-8,xna,async-await,C#,Windows 8,Xna,Async Await,我正在用XNA和Monogame编写一个Windows8Metro应用程序。 我正在使用此代码读取文件: 文件读取: 我用以下方法调用该方法: XDocument gameinfo = null; try { getDoc("gameinfo.xml"); while (readstate == 0) { } gameinfo = doc; }

我正在用XNA和Monogame编写一个Windows8Metro应用程序。 我正在使用此代码读取文件:

文件读取:

我用以下方法调用该方法:

        XDocument gameinfo = null;
        try
        {
            getDoc("gameinfo.xml");
            while (readstate == 0) { }
            gameinfo = doc;
        }
        catch { gameinfo = null; }
问题是: 如果我调试应用程序,一切正常。 如果我释放应用程序,然后直接从Win8启动屏幕启动,则应用程序不会启动。 我发现

while (readstate == 0) { }
readstate在release状态下永远不会得到与0不同的值。但我不知道为什么

我对每个答案都很满意。 谢谢大家!



谢谢你的快速回答,纳赫尔! 我重写了代码,但仍然不适用于我,行为与以前一样

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;
        }

    }
private异步任务getDoc(字符串文件名)
{
尝试
{
//获取文件
StorageFile myStorageFile=wait ApplicationData.Current.LocalFolder.GetFileAsync(文件名);
var readThis=await FileIO.ReadLinesAsync(myStorageFile);
字符串txt=“”;
foreach(readThis中的var行)
{
txt+=line.ToString();
}
如果(txt.Length>0)
{
doc=XDocument.Parse(txt);
}
返回1;
}
捕获(FileNotFoundException ex)
{
doc=null;
返回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; }
XDocument gameinfo=null;
尝试
{
Task tsk=getDoc(“gameinfo.xml”);
int result=tsk.result;
如果(结果==1)
{
gameinfo=doc;
}
其他的
{
gameinfo=null;
}
}
catch{gameinfo=null;}

您使用的方法具有一些
async
操作,但没有将其标记为
async

getDoc
方法标记为
async
,并在调用它的地方等待它

不要使用readstate变量,而是从
getDoc
方法返回
int
,并在主调用中使用该对象。或者更好的是,返回您想要使用的文档

下面是异步/等待调用如何工作的图片:

如果在方法中有一个wait,那么一旦代码到达它;它将返回给它的调用者。在那之后有一个无限循环对你没有帮助

更新:

根据您的新答案,您缺少
getDoc
呼叫中的
wait

替换:

Task<int> tsk = getDoc("gameinfo.xml");
Task tsk=getDoc(“gameinfo.xml”);
与:

Task tsk=wait getDoc(“gameinfo.xml”);

无法使用:

Task<int> tsk = await getDoc("gameinfo.xml");


根据您的新代码段更新了我的答案。
Task<int> tsk = await getDoc("gameinfo.xml");
Task<int> tsk = await getDoc("gameinfo.xml");
while (readstate == 0) { }
   while (readstate == 0) {
        System.Threading.Tasks.Task.Yield();        
    }