线程和等待

Jam*_*ery 0 c# multithreading

我有一个线程,它从网站收集一个URL列表,并在这样做时更新UI.这很好.但是,我需要主线程等待直到收集链接.我尝试进行连接,但这会锁定UI.这是我的例子.正如您所看到的那样,在线程运行的同时调用foreach循环.我希望foreach在线程运行后运行.

有任何想法吗?

/** This thread will add links to list<string> linkList **/
Thread linkListThread = new Thread(new ThreadStart(getLinkList));
linkListThread.Start();
foreach (String link in linkList)
{
    txtOutput.Text += link;
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*mar 6

您可以使用后台工作程序.或者让线程方法在完成后在主上下文中调用方法,传递您收集的项目列表.

编辑
我认为我应该详细阐述我的第二种方法.

您可以在创建线程之前准备列表实例:

List<string> links = new List<string>();
Run Code Online (Sandbox Code Playgroud)

然后将此列表传递给填充它的线程:

Thread t = new Thread(new ParameterizedThreadStart(FillList));
t.Start(links);
Run Code Online (Sandbox Code Playgroud)

线程方法获取列表,填充它并调用显示UI中详细信息的方法:

private static void FillList(object state)
{
    List<string> links = (List<string>)state;

    // Fill data

    this.Invoke((MethodInvoker)delegate() { HandleNewLinks(links); }));
}
Run Code Online (Sandbox Code Playgroud)

HandleNewLinks方法可以正常工作:

private void HandleNewLinks(List<string> links)
{
    foreach (string link in links)
        // Do something...
}
Run Code Online (Sandbox Code Playgroud)