C# 如何在WPF中的UserControl中运行BackgroundWorker?
我在UserControl中运行BackgroundWorker以从服务器下载某些内容时遇到问题。我的问题是,当我编写以下代码时,UserControl get返回到主窗体,并且下载没有开始C# 如何在WPF中的UserControl中运行BackgroundWorker?,c#,wpf,C#,Wpf,我在UserControl中运行BackgroundWorker以从服务器下载某些内容时遇到问题。我的问题是,当我编写以下代码时,UserControl get返回到主窗体,并且下载没有开始 public AdFeeds() { InitializeComponent(); bgWorker = new BackgroundWorker(); bgWorker.DoWork += bg
public AdFeeds()
{
InitializeComponent();
bgWorker = new BackgroundWorker();
bgWorker.DoWork += bgWorker_DoWork;
bgWorker.RunWorkerAsync();
}
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
DownloadWallpaper();
}
对于下载壁纸,我使用以下代码
public static void DownloadWallpaper()
{
try
{
DataSet dsFile = Global.ReadConfig;
XDocument xDoc = XDocument.Load(dsFile.Tables[0].Rows[0][9].ToString());//Environment.CurrentDirectory+@"..\..\..\App_Data\Wallpaper.xml");//(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\Wallpaper\\Themes.xml");
string s = xDoc.Root.Name.ToString();
var countNode = xDoc.Root.Elements().Count();
for (int i = 0; i < countNode; i++)
{
XNode childNode = xDoc.Root.Nodes().ElementAt(i);
XElement ele = (XElement)childNode;
path = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\Wallpaper\\Banner\\" + ele.Name;
DirectoryInfo di = Directory.CreateDirectory(path);
var movieList = from a in xDoc.Root.Descendants(ele.Name).Elements()
select new Ad()
{
Path = ele.Name.ToString(),
Link = a.Value
};
foreach (var a in movieList)
{
Global.filedownload(dsFile.Tables[0].Rows[0][1].ToString() + "/Banner/" + ele.Name + "/", path + "\\");
advertisement.Add(a);
}
}
}
catch
{
}
}
publicstaticvoid下载壁纸()
{
尝试
{
数据集dsFile=Global.ReadConfig;
XDocument xDoc=XDocument.Load(dsFile.Tables[0]。行[0][9]。ToString();//Environment.CurrentDirectory++.\..\\..\App\u Data\wallper.xml”);//(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)+“\\wallper\\Themes.xml”);
字符串s=xDoc.Root.Name.ToString();
var countNode=xDoc.Root.Elements().Count();
对于(int i=0;i
我希望在初始化主窗体时初始化该用户控件,所以我要等到下载的用户控件的内容被锁定,直到内容被下载 加载
AdFeeds
后运行事件。要执行此操作,请在加载的事件处理程序中启动worker
public AdFeeds()
{
InitializeComponent();
Loaded += OnLoaded;
}
private async void OnLoaded(object sender, RoutedEventArgs e)
{
Loaded -= OnLoaded;
await Task.Run(()=>
{
DownloadWallpaper();
});
}
此外,无需使用后台工作人员。你可以只使用一个简单的任务
,然后等待它。它对我有效,但我仍然对此有问题。我想在下载墙纸文件夹时更新UI,但使用此代码,我的UI会在下载服务器上保存的所有墙纸文件夹时更新。我认为您应该在得到答案后发布新问题。