取消webclient.UploadFileAsync()casue TargetInvocationException错误

时间:2013-01-09 17:23:43

标签: c# webclient

我正在使用Webclient上传文件,当用户点击中止时。我想取消上传,但文件会继续上传,直到完成为止。在我的中止按钮中,我发出了一个wc.CancelAsync,导致表单关闭并发出一个TargetInvocationException,在Program.cs上出现未处理的错误

[STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new frmUpload());
}

以下是我的部分代码

WebClient wc = new WebClient();  

    private void buttonAbort_Click(object sender, EventArgs e)
    {
        wc.CancelAsync();
    }

//Upload code
    try
    {
        wc.UploadFileAsync(Uripath, localPath);                    
        wc.UploadProgressChanged += uploadBarStat;
        wc.UploadFileCompleted += new UploadFileCompletedEventHandler(doneFTP);
    }

我的问题几乎与Cancel a Webclient.DownloadFile within a BackgroundWorker

一致

我错过了什么以及如何顺利取消上传需要做什么?或陷阱异常错误?

TIA 史蒂夫

2 个答案:

答案 0 :(得分:0)

你是否有机会接受“尝试”?另外,将wc.CancelAsync();包装在try / catch中,然后运行调试器。通过catch捕获TargetInvocationError是否像普通异常一样,或者它仍然在IDE中引发了一个丑陋的错误?

如果它仍然在IDE中引发一个丑陋的错误,也许这篇文章会有所帮助:

Why is TargetInvocationException treated as uncaught by the IDE

答案 1 :(得分:0)

添加变量boolean:

bool inUpload=false;
然后改变值,如:

    void UploadProgressChanged()
            {
               inUpload=true;
            }

void UploadFileCompleted()
            {
               inUpload=false;
            }

并添加单击事件检查:

 private void buttonAbort_Click(object sender, EventArgs e)
    {
       if (inUpload) wc.CancelAsync();
    }