Downloading file error: Cannot convert type
Downloading file error: Cannot convert type
我正在尝试从我的 DropBox 帐户下载文件。
我在
中遇到错误
var task = Task.Run((Func<Task>)Download("", "largetest.mpk", folderName));
错误:
Cannot convert type 'System.Threading.Tasks.Task' to 'System.Func<System.Threading.Tasks.Task>
private void button1_Click(object sender, EventArgs e)
{
string folderName = @"c:\dropboxTest\test.exe";
var task = Task.Run((Func<Task>)Download("", "largetest.mpk", folderName));
task.Wait();
}
async Task Download(string folder, string targetfile, string localPath)
{
var dbx = new DropboxClient(Form1.api);
var response = await dbx.Files.DownloadAsync(folder + "/" + targetfile);
ulong fileSize = response.Response.Size;
const int bufferSize = 1024 * 1024;
var buffer = new byte[bufferSize];
string folderName = @"C:\dropboxTest\teasdfst.exe";
using (var stream = await response.GetContentAsStreamAsync())
{
using (var localfile = new FileStream(folderName, FileMode.OpenOrCreate))
{
var length = stream.Read(buffer, 0, bufferSize);
while (length > 0)
{
localfile.Write(buffer, 0, length);
// Console.WriteLine(localfile.);
var percentage = 100 * (ulong)localfile.Length / fileSize;
// Update progress bar with the percentage.
// progressBar.Value = (int)percentage
//Console.WriteLine(percentage);
length = stream.Read(buffer, 0, bufferSize);
}
}
}
}
你应该这样写你的函数
void Download(string folder, string targetfile, string localPath)
{
var dbx = new DropboxClient(Form1.api);
var response = dbx.Files.Download(folder + "/" + targetfile);
ulong fileSize = response.Response.Size;
const int bufferSize = 1024 * 1024;
var buffer = new byte[bufferSize];
string folderName = @"C:\dropboxTest\teasdfst.exe";
using (var stream = response.GetContentAsStream())
{
using (var localfile = new FileStream(folderName, FileMode.OpenOrCreate))
{
var length = stream.Read(buffer, 0, bufferSize);
while (length > 0)
{
localfile.Write(buffer, 0, length);
// Console.WriteLine(localfile.);
var percentage = 100 * (ulong)localfile.Length / fileSize;
// Update progress bar with the percentage.
// progressBar.Value = (int)percentage
//Console.WriteLine(percentage);
length = stream.Read(buffer, 0, bufferSize);
}
}
}
}
然后用 Task.Run
调用,如下所示
private void button1_Click(object sender, EventArgs e)
{
string folderName = @"c:\dropboxTest\test.exe";
var task = Task.Run(() => Download("", "largetest.mpk", folderName));
task.Wait(); // remove this if you don't want to block UI thread.
}
希望对您有所帮助!!
您不需要做所有这些。没有转换,没有转换,没有 Task.Run
.
随便写
const string folderName = @"c:\dropboxTest\test";
private async void button1_Click(object sender, EventArgs e)
{
await Download("", "largetest.mpk", folderName);
}
注意我们直接等待方法调用。请注意如何删除对 Task.Wait
的调用。
注意除了在事件处理程序的情况下,需要void
方法,async
方法应该return
Task
对象。这非常重要,尤其是对于正确的异常处理而言。这是 async void
正确的唯一情况。
您的 Download
方法(按照惯例应重命名为 DownloadAsync
)已经具有正确的 return 类型 Task
,因此不应在这方面进行更改。
我正在尝试从我的 DropBox 帐户下载文件。
我在
中遇到错误
var task = Task.Run((Func<Task>)Download("", "largetest.mpk", folderName));
错误:
Cannot convert type 'System.Threading.Tasks.Task' to 'System.Func<System.Threading.Tasks.Task>
private void button1_Click(object sender, EventArgs e)
{
string folderName = @"c:\dropboxTest\test.exe";
var task = Task.Run((Func<Task>)Download("", "largetest.mpk", folderName));
task.Wait();
}
async Task Download(string folder, string targetfile, string localPath)
{
var dbx = new DropboxClient(Form1.api);
var response = await dbx.Files.DownloadAsync(folder + "/" + targetfile);
ulong fileSize = response.Response.Size;
const int bufferSize = 1024 * 1024;
var buffer = new byte[bufferSize];
string folderName = @"C:\dropboxTest\teasdfst.exe";
using (var stream = await response.GetContentAsStreamAsync())
{
using (var localfile = new FileStream(folderName, FileMode.OpenOrCreate))
{
var length = stream.Read(buffer, 0, bufferSize);
while (length > 0)
{
localfile.Write(buffer, 0, length);
// Console.WriteLine(localfile.);
var percentage = 100 * (ulong)localfile.Length / fileSize;
// Update progress bar with the percentage.
// progressBar.Value = (int)percentage
//Console.WriteLine(percentage);
length = stream.Read(buffer, 0, bufferSize);
}
}
}
}
你应该这样写你的函数
void Download(string folder, string targetfile, string localPath)
{
var dbx = new DropboxClient(Form1.api);
var response = dbx.Files.Download(folder + "/" + targetfile);
ulong fileSize = response.Response.Size;
const int bufferSize = 1024 * 1024;
var buffer = new byte[bufferSize];
string folderName = @"C:\dropboxTest\teasdfst.exe";
using (var stream = response.GetContentAsStream())
{
using (var localfile = new FileStream(folderName, FileMode.OpenOrCreate))
{
var length = stream.Read(buffer, 0, bufferSize);
while (length > 0)
{
localfile.Write(buffer, 0, length);
// Console.WriteLine(localfile.);
var percentage = 100 * (ulong)localfile.Length / fileSize;
// Update progress bar with the percentage.
// progressBar.Value = (int)percentage
//Console.WriteLine(percentage);
length = stream.Read(buffer, 0, bufferSize);
}
}
}
}
然后用 Task.Run
调用,如下所示
private void button1_Click(object sender, EventArgs e)
{
string folderName = @"c:\dropboxTest\test.exe";
var task = Task.Run(() => Download("", "largetest.mpk", folderName));
task.Wait(); // remove this if you don't want to block UI thread.
}
希望对您有所帮助!!
您不需要做所有这些。没有转换,没有转换,没有 Task.Run
.
随便写
const string folderName = @"c:\dropboxTest\test";
private async void button1_Click(object sender, EventArgs e)
{
await Download("", "largetest.mpk", folderName);
}
注意我们直接等待方法调用。请注意如何删除对 Task.Wait
的调用。
注意除了在事件处理程序的情况下,需要void
方法,async
方法应该return
Task
对象。这非常重要,尤其是对于正确的异常处理而言。这是 async void
正确的唯一情况。
您的 Download
方法(按照惯例应重命名为 DownloadAsync
)已经具有正确的 return 类型 Task
,因此不应在这方面进行更改。