【发布时间】:2020-11-20 12:05:47
【问题描述】:
自上周以来,我一直在寻找解决方案,但我尝试的所有解决方案均无效。
我正在尝试做一件看起来很简单的事情。在 WebGL 模式下,我需要停止游戏执行,直到收到来自服务器的响应。我需要这个,因为如果发送的试探失败,我必须向玩家显示一条消息。
我试图通过使用WWW 类和IEnumerator 方法来做到这一点。我无法通过调用StartCoroutine 来启动IEnumarator 方法,因为这样做会立即开始执行下一行。所以我只是声明了一个 IEnumerator 类型的变量并调用了MoveNext 方法。
按照我的方法:
public class ServerOperations
{
//...
private int failed;
public void RegisterPlay()
{
//...
IEnumerator e = uploadFile(resultsFileName, resultsFileContent);
while (e.MoveNext());
//...
}
IEnumerator uploadFile(string fileName, string contentFile)
{
//...
WWW www = new WWW(URL, formData);
yield return www;
while (!www.isDone)
{
Debug.Log("Not done");
yield return true;
}
if (www.error != null) {
Debug.Log ("file " + fileName + " w.error = " + www.error);
failed = 1;
}
else
{
failed = 0;
}
}
}
文件已发送,但www.isDone 从未变为true,并且游戏因内存不足异常而崩溃。
我在我的实现中关注这个post。
为什么我的服务器收到了文件,而www.isDone 永远不会成为真的?
【问题讨论】:
-
从未使用过该库,但在 WWW 的文档中(除了说它现在已经过时),它说属性 .isDone 会在文件下载完成时更改,但从我可以阅读您的问题,您实际上是在将文件上传到服务器,对吗?
标签: c# unity3d coroutine ienumerator