我是C#的初学者。我正在尝试制作一个简单的程序,显示从网站到ListBox的链接。由于检索链接需要花费时间,因此我的GUI会一直等到所有链接都被解析并且ListBox在变为可见之前就已填充。
我认为这是因为InitializeComponent()和我的ParseLinks()方法在同一个线程中运行。我想知道是否有办法在加载UI元素后运行ParseLinks()。
public mainForm()
{
InitializeComponent();
ParseLinks();
}
我很感激任何意见。感谢
[编辑]
关于ParseLinks()
的更多信息:(由于代码相当广泛,我将提供摘要)
ParseLinks()
将链接转换为arraylist并将arraylist分配给ListBox
。整个操作非常有效。但我希望显示GUI,然后填充ListBox
。我也在禁用按钮时将ProgressBar
样式更改为Marquee
。参考下面给出的响应,当我使用Backgroundworker
时,我遇到了多个跨线程操作错误,我通过将GUI编辑代码放在一个InvokeRequired
语句中解决了这个问题
答案 0 :(得分:2)
如果您使用的是WinForms,我建议使用BackgroundWorker。您的表单将在后台线程中填充ListBox 更多详情here和here。
<强> [编辑] 强>
这是基本的想法:
public Form1()
{
InitializeComponent();
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for(var i = 0; i < 1000; i++)
{
var newElement = BuildMyElement(i);
backgroundWorker1.ReportProgress(0, newElement);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
var newElement = (MyType)e.UserState;
listBox1.Items.Add(newElement);
}
将backgroundWorker1_DoWork替换为您用于检索网址的代码。
答案 1 :(得分:1)
放入表格加载功能。