gpt4 book ai didi

c# - 如何在 WPF 的 UserControl 中运行 BackgroundWorker?

转载 作者:行者123 更新时间:2023-11-30 23:24:57 27 4
gpt4 key购买 nike

我在 UserControl 中运行 BackgroundWorker 从服务器下载一些内容时遇到问题。我的问题是,当我编写以下代码时,UserControl get 返回到主窗体并且无法开始下载。

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
{

}
}

我希望在主窗体初始化时初始化该用户控件,所以我等到用户控件的内容下载我的 UI 被锁定,直到内容被下载。

最佳答案

在加载 AdFeeds 后运行该事件。为此,在 Loaded 事件处理程序中启动 worker。

public AdFeeds()
{
InitializeComponent();

Loaded += OnLoaded;
}

private async void OnLoaded(object sender, RoutedEventArgs e)
{
Loaded -= OnLoaded;

await Task.Run(()=>
{
DownloadWallpaper();
});
}

此外,无需使用后台工作人员。您可以只使用一个简单的 Task,然后 await 它。

关于c# - 如何在 WPF 的 UserControl 中运行 BackgroundWorker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37520050/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com