如何在继续使用C#之前确保GUI元素并加载

时间:2011-05-14 19:38:14

标签: c#

我是C#的初学者。我正在尝试制作一个简单的程序,显示从网站到ListBox的链接。由于检索链接需要花费时间,因此我的GUI会一直等到所有链接都被解析并且ListBox在变为可见之前就已填充。

我认为这是因为InitializeComponent()和我的ParseLinks()方法在同一个线程中运行。我想知道是否有办法在加载UI元素后运行ParseLinks()。

    public mainForm()
    {
        InitializeComponent();
        ParseLinks();
    }

我很感激任何意见。感谢

[编辑]

关于ParseLinks()的更多信息:(由于代码相当广泛,我将提供摘要)

ParseLinks()将链接转换为arraylist并将arraylist分配给ListBox。整个操作非常有效。但我希望显示GUI,然后填充ListBox。我也在禁用按钮时将ProgressBar样式更改为Marquee。参考下面给出的响应,当我使用Backgroundworker时,我遇到了多个跨线程操作错误,我通过将GUI编辑代码放在一个InvokeRequired语句中解决了这个问题

2 个答案:

答案 0 :(得分:2)

如果您使用的是WinForms,我建议使用BackgroundWorker。您的表单将在后台线程中填充ListBox 更多详情herehere

<强> [编辑]

这是基本的想法:

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)

放入表格加载功能。