ファイルをダウンロードしているフォームがあります。私は、ファイルのダウンロードや進行状況などを処理する別のクラス(download.cs)を持っています。完了したらファイルを実行する方法を理解できません。一度ダウンロードしたイベントを見ることができますが、その時点で私はコールルーチンで何が起きているのか再開したいと思います。明確にするためダウンロードしたファイルをクラスからダウンロードします。
のForm1.cs
private void btnDownloadProfile_Click(object sender, EventArgs e)
{
tc.SelectTab("tabLog");
Download d = new Download();
d.DownloadFile("http://www.****.com/Downloads/***.zip", appPath + @"Files\***.zip", "Filename");
//At this point i'd like to wait for the download to finish and then execute the download
}
Download.cs
WebClient webClient;
public void DownloadFile(String URL, String Path, String Name)
{
using (webClient = new WebClient())
{
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
Uri Link = new System.Uri(URL);
try
{
Log.addLog("Attempting to download: " + Name);
webClient.DownloadFileAsync(Link, Path);
}
catch (Exception ex)
{
Log.addLog(ex.Message);
}
}
}
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Log.addLog(e.ProgressPercentage.ToString() + "%");
}
private void Completed(object sender, AsyncCompletedEventArgs e)
{
if (e.Cancelled == true)
{
Log.addLog("Download has been canceled.");
}
else
{
Log.addLog("Download completed!");
}
}
EDIT 。ボタンをクリックすると、イベントはForm1.csで実行され、ダウンロードが開始されます。これは、非同期のものを使用して背景に移動し、UIを自由にします。ログファイルにダウンロードが表示されます。 CompeltedアイテムがDownload.csで実行されると、ファイルのダウンロードが完了したことがわかります。しかし、私はその時点でどのファイルがダウンロードを完了したのかわからない。ファイルがダウンロードされたことを伝えるだけだ。どのようにしてファイル名を完成させるか、btnDownloadProfile_Clickのイベントをファイルが終了してから処理するまで続けることができます。
ダウンロード後にZIPファイルを開きたいだけですか? あなたはプログラムを使うか、デフォルトのプログラムを実行してzipファイルを開きますか? 両方の解決策があります:System.IO.Compression もう1つはSystem.Diagnostics.Process.Start –
こんにちは、申し訳ありませんが、私はダウンロードしたファイルを抽出または実行する方法を知っています。私が得られないことは、完了したルーチンがダウンロードされた後、ファイルの詳細などを取得してフォーム1のサブルーチンを続けることです。 – TMB87
私は理解できません:c質問を編集して、 3? –