私は自分自身で進捗バーが知っているが、すでに死に頼まれてきたが、私は1つに問題を抱えています。私はFTP経由でファイルをダウンロードする必要があり、私はWebクライアントを使用しています、ダウンロードしたデータは、バイト配列に保存する必要があるが、WebClient.DownloadDataAsyncは直接それを返すことができないので、私は、データをアクセスもするDownloadDataCompletedメソッドを使用する必要があります。ときにバイト配列が存在しないため、アプリケーションがクラッシュし、そこOKですが、問題は、私は全体のスレッドをブロックせずのIEnumeratorブロックを「一時停止」することはできません、と私はそれを一時停止していない場合ということであるまで、すべてアップそれにアクセスしようとします。ダウンロードするファイルがhttpであったとき、私はWWWを使いましたが問題はありませんでしたが、FTPに移動しなければなりませんでした。 WebClient.DownloadDataを使用すると動作しますが、プログレスバーを含めるように求められました。とにかく、here'sコード:イテレータブロック内にダウンロードプログレスバーを作成できますか?
IEnumerator DownloadGame(Dictionary<string, string> settingsDict)
{
statusText = "Starting download...";
WebClient request = new WebClient();
request.Credentials = new NetworkCredential("user", "password");
request.DownloadDataCompleted += DownloadDataCompleted;
//byte[] fileData = request.DownloadData(settingsDict["downloadlink"]); This works, but is no good since it blocks the thread
request.DownloadDataAsync(new Uri(settingsDict["downloadlink"]),"somefilepath");
//do{}while(!downloadFinished); This also works but blocks the thread anyway
//Process the update
string tmpRoot = TMPFolder();
string tmpFolder = tmpRoot + Application.platform + settingsDict["latestVersion"] + "/";
if (!UnzipUpdate(fileData, tmpFolder))//fail here, in this case fileData is global
{
DeleteDirectory(tmpRoot);
yield break;
}
if (!ProcessUpdateData(tmpFolder))
{
DeleteDirectory(tmpRoot);
yield break;
}
DeleteDirectory(tmpRoot);
settingsDict["thisVersion"] = GetNextVersion();
}
void DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e){
fileData = e.Result;
downloadFinished = true;
}
スレッディングは、おかげで助けをしました。 – Samssonart
よろしくお願いします..ハッピーコーディングマルコ – MethodMan