我有一个线程,它从网站收集一个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)
您可以使用后台工作程序.或者让线程方法在完成后在主上下文中调用方法,传递您收集的项目列表.
编辑
我认为我应该详细阐述我的第二种方法.
您可以在创建线程之前准备列表实例:
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)
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |