0

我正在使用 Webclient 上传文件,当用户单击中止时。我想取消上传,但文件继续上传,直到完成。在我的中止按钮中,我发出了一个 wc.CancelAsync 导致表单关闭并发出 TargetInvocationException is unhandled error at 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);
    }

我的问题几乎与在 BackgroundWorker 中取消 Webclient.DownloadFile 相同

我错过了什么,我需要做什么才能顺利取消上传?或捕获异常错误?

TIA史蒂夫

4

2 回答 2

0

添加一个变量布尔值:

bool inUpload=false;

然后改变值,如:

    void UploadProgressChanged()
            {
               inUpload=true;
            }

void UploadFileCompleted()
            {
               inUpload=false;
            }

并添加签入点击事件:

 private void buttonAbort_Click(object sender, EventArgs e)
    {
       if (inUpload) wc.CancelAsync();
    }
于 2013-01-09T21:39:34.530 回答
0

你有什么可以配合“尝试”的吗?此外,将其包装wc.CancelAsync();在 try/catch 中,然后运行调试器。是TargetInvocationError通过 catch 像普通异常一样被捕获,还是在 IDE 中仍然抛出一个丑陋的错误?

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

为什么 TargetInvocationException 被 IDE 视为未捕获

于 2013-01-09T17:40:55.657 回答