C# 未使用WebClient触发事件。。。怎么了?

C# 未使用WebClient触发事件。。。怎么了?,c#,events,C#,Events,我正在编写一个实用程序来执行SQL Server备份,然后压缩文件,然后使用WebClient将其上载到我的FTP站点。一些文件可能相当大,我需要使用ProgressBar显示上传的状态。WebClient提供了两种方法来处理此问题,UploadProgressChangedEventHandler和UploadFileCompletedEventHandler,但WebClient没有触发它们 我已经尝试过使用WebRequest和FtpWebRequest复制文件的其他方法,但它们也不能正常

我正在编写一个实用程序来执行SQL Server备份,然后压缩文件,然后使用WebClient将其上载到我的FTP站点。一些文件可能相当大,我需要使用ProgressBar显示上传的状态。WebClient提供了两种方法来处理此问题,UploadProgressChangedEventHandler和UploadFileCompletedEventHandler,但WebClient没有触发它们

我已经尝试过使用WebRequest和FtpWebRequest复制文件的其他方法,但它们也不能正常工作,而且WebClient看起来很简单,所以我就这样做了

        try
        {
            WebClient client = new WebClient();
            client.Credentials = new NetworkCredential(txtFTPUserName.Text, txtFTPPassword.Text);
            client.UploadProgressChanged += new UploadProgressChangedEventHandler(UploadProgressChangedEventArgs);
            client.UploadFileCompleted += new UploadFileCompletedEventHandler(UploadFileCompletedEventHandler);
            progBar.Visible = true;
            progBar.Value = 0;
            client.UploadFile(@"ftp://novantconsulting.com/SQLBackups/StrataFrame.bak", @"E:\Strataframe.bak");
         }

    private void UploadProgressChangedEventArgs(object sender, UploadProgressChangedEventArgs e)
    {
        int percentage = (Convert.ToInt32(e.BytesSent) / Convert.ToInt32(e.TotalBytesToSend)) * 100;

        if (progBar.Value < progBar.Maximum)
        {
            progBar.Value = percentage;
        }
        else
        {
            progBar.Value = 100;
        }
    }
试试看
{
WebClient客户端=新的WebClient();
client.Credentials=新的网络凭据(txtFTPUserName.Text,txtftpassword.Text);
client.UploadProgressChanged+=新的UploadProgressChangedEventHandler(UploadProgressChangedEventArgs);
client.UploadFileCompleted+=新的UploadFileCompletedEventHandler(UploadFileCompletedEventHandler);
progBar.Visible=true;
progBar.Value=0;
client.UploadFile(@)ftp://novantconsulting.com/SQLBackups/StrataFrame.bak“,@“E:\Strataframe.bak”);
}
私有void UploadProgressChangedEventArgs(对象发送方,UploadProgressChangedEventArgs e)
{
整数百分比=(Convert.ToInt32(e.BytesSent)/Convert.ToInt32(e.TotalBytesToSend))*100;
if(编程条值<编程条最大值)
{
progBar.Value=百分比;
}
其他的
{
程序条值=100;
}
}
问题是WebClient没有引发事件,以便委托可以完成更新ProgressBar的工作。我被告知这是WPF的一个已知问题,但我正在使用WinForms,因此该问题不适用于

,根据,仅当通过调用或启动上载时才会引发该事件

根据,仅当通过调用启动上载时才会引发该事件

简言之,您所呼叫的服务器不会引发这些事件;请改用。

根据,仅当通过调用或启动上载时才会引发该事件

根据,仅当通过调用启动上载时才会引发该事件


简言之,您所呼叫的服务器不会引发这些事件;请改用。

请修复示例代码。您得到了一个try块,没有catch或finally,并且在任何函数之外。如果这是您的真实代码,那么这是无法编译的。我没有发布完整的try-catch-finally块,因为它似乎与这个问题没有密切关系。发帖过程中的说明告诉你,要把问题的意思表达清楚,请修改你的示例代码。您得到了一个try块,没有catch或finally,并且在任何函数之外。如果这是您的真实代码,那么这是无法编译的。我没有发布完整的try-catch-finally块,因为它似乎与这个问题没有密切关系。发帖过程中的说明告诉我们,要把问题的意思表达清楚,就必须把最基本的内容发出去。