我的项目陷入了死胡同。我正在我的Form1中运行BackgroundWorker (在类FTPcllient中),它在另一个类(称为FTPengine)中启动FTP文件下载功能(称为下载) 。
(我在后台线程中自然运行,因此当从FTP下载大量内容时,UI不会卡住。)
private void download_DoWork(object sender, DoWorkEventArgs e)
{
ftp ftpClient = new ftp(parameters[0], parameters[1], parameters[2]); //Init connection
ftpClient.download(file, localfile); //Start download
}
我有一个名为"报告进度" (在FTPengine类中),返回两个整数(以字节为单位的文件大小和当前下载的字节)。我需要将这两个整数返回到UI线程并将进度报告给ProgressBar元素。
我尝试了多次使用invoke方法和Backgroundworker reportprogress,但由于代码实际上不是直接在backgroundworker中,而是在完全不同的类中,我没有运气。我搜索了网络等等但没有结果。如果有人知道需要做出哪些改变,我们将不胜感激。
答案 0 :(得分:1)
如果您可以访问Dispatcher,则可以致电
Dispatcher.RunAsync(priority,()=>
{
//The Action with the parameters
});
取决于方法更改的版本
如果您在该地方没有访问权限,则可以使用App.RootFrame.Dispatcher或Window.Current.Dispatcher,这取决于您正在创建的应用程序版本。
ADDED
对于Windows窗体
BeginInvoke((Action)(() =>
{
//Do what you need
}));
并在UI中处理您需要的内容