用于Windows应用商店的构建中的WebClient类 - 在Unity中构建错误

时间:2017-02-24 22:15:49

标签: c# unity3d windows-store-apps win-universal-app hololens

我正在为Windows Store平台(Universal 10 SDK)构建一个统一的应用程序(5.4.0f3)。 我将在hololens上运行它。

我在编译脚本时遇到问题,这似乎是由于我正在使用的WebClient类。我也试过在另一篇文章中推荐使用HttpClient,但没有运气。我看到有些人在Unity中使用WebClient类成功构建,但我猜他们没有为Windows Store构建。

我得到的编译错误:     错误CS0246:找不到类型或命名空间名称“WebClient”(您是否缺少using指令或程序集引用?)     “webClient”这个名称在当前上下文中不存在

我刚刚开始使用Unity,但我相信我可以在使用WebClient的代码周围添加一些指令,或者声明一个新的WebClient,这样它仍然可以编译并能够在hololens上运行。

我找到了“平台相关编译”页面(https://docs.unity3d.com/Manual/PlatformDependentCompilation.html),这似乎解释了这一点。 我尝试使用其中的一些(例如UNITY_WSA,UNITY_WSA_10_0等),但没有运气。我目前正以下列方式使用yahoo finance API:webClient.DownloadFile(url, stockFile);下载.csv文件。 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我注意到您使用了WebClient.DownloadFile。你应该使用DownloadFile函数,因为这将等待文件完成下载之后。这次会发生什么,因为主线程被阻止,UI将被冻结。

如果您想使用WebClient API,则应使用DownloadFileAsync函数。 Here是如何做到这一点的一个例子。

您可以在Hololens以外的平台上使用WebClient。然后,您可以在hololens上使用WWWUnityWebRequest,然后在完成下载后使用File.WriteAllBytes保存文件。

伪代码应如下所示:

#if !UNITY_WSA_10_0
WebClient API
#else
WWW API
#endif

完整代码:

string url = "http://www.yourUrl.com";
string savePath = Path.Combine(Application.dataPath, "file.txt");
int downloadID = 0;

#if !UNITY_WSA_10_0
//Will be used on Platforms other than Hololens
void downloadFile()
{
    WebClient webClient = new WebClient();
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DoSomethingOnFinish);
    webClient.QueryString.Add("fileName", downloadID.ToString());
    Uri uri = new Uri(url);
    webClient.DownloadFileAsync(uri, savePath);
    downloadID++;
}

void DoSomethingOnFinish(object sender, AsyncCompletedEventArgs e)
{
    string myFileNameID = ((System.Net.WebClient)(sender)).QueryString["fileName"];
}

#else
//Will be used on Hololens
void downloadFile()
{
    StartCoroutine(downloadFileCOR());
}

IEnumerator downloadFileCOR()
{
    WWW www = new WWW(url);
    yield return www;

    Debug.Log("Finished Downloading file");

    byte[] yourBytes = www.bytes;

    //Now Save it
    System.IO.File.WriteAllBytes(savePath, yourBytes);
}
#endif

<强>用法

downloadFile();

如果仍然出现错误,那么您还使用了Hololens不支持的命名空间。你也应该处理好这个问题。让我们知道名字是System.Net;,你可以像下面这样解决它:

#if !UNITY_WSA_10_0
using System.Net;
#endif

答案 1 :(得分:0)

正如程序员在他的回答中提到的,在HoloLens平台上不存在webclient,除了滚动自己,因为他建议另一种选择是使用Unity资源商店中可用的客户端之一。我知道在HoloLens工作的一对夫妇是:

最佳HTTP

https://www.assetstore.unity3d.com/en/#!/content/10765

Uniweb

https://www.assetstore.unity3d.com/en/#!/content/40505

资产商店还有很多其他产品,但这些是我在HoloLens上试过的两种产品。