gpt4 book ai didi

c# - DoWork 事件中的 LoadCompleted 事件

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:12 24 4
gpt4 key购买 nike

首先,我贴出我的代码:

public partial class MainWindow : Window
{
private readonly BackgroundWorker worker = new BackgroundWorker();
private List<string> list = new List<string>();
private List<string> arrOfAdresses = new List<string>();

public MainWindow()
{
InitializeComponent();
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
list.Add("http://www.yahoo.com");
list.Add("http://www.google.com");
}

private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("All is done");
}

private void worker_DoWork(object sender, DoWorkEventArgs e)
{
foreach (string s in list)
{
WebBrowser bro = new WebBrowser();
bro.Width = bro.Height = 1;
grid.Children.Add(bro);
bro.Navigate(s);
bro.LoadCompleted += OnLoadCompleted;
}
}

private void button_Click(object sender, RoutedEventArgs e)
{
worker.RunWorkerAsync();
}

private void OnLoadCompleted(object sender, NavigationEventArgs e)
{
WebBrowser bro = sender as WebBrowser;
this.arrOfAdresses.Add(bro.Source.ToString()+"Added text");
MessageBox.Show("xxx"); //MessageBox is ignored
}

private void shower_Click(object sender, RoutedEventArgs e)
{
arrOfAdresses.Reverse();
foreach (string s in arrOfAdresses)
MessageBox.Show(s);
}
}

button_click 事件应该将地址存储到 arrOfAdresse 中,这将被稍微修改。

接下来,shower_Click 应显示 arrOfAdresses 中的所有修改值。当我想显示我应该在 arrOfAdresses 中的值时,它什么都不返回。我认为,问题出在 LoadCompleted 事件中,因为当我放置 MessageBox 时,程序会忽略它。当 shower_Click 出现时,有什么方法可以显示值吗?有什么方法可以修复它吗?感谢您的回复。

最佳答案

DoWork 在另一个线程上运行,因此您不能(直接)触摸 UI。最明显的罪犯:

  grid.Children.Add(bro);

但是创建和加载 WebBrowser 可能也不行。

这里要学习的最重要的一课:

  • 始终首先检查 Completed 事件中的 e.Error 属性。

关于c# - DoWork 事件中的 LoadCompleted 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944235/

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