2011-05-13 55 views
0

我的想法是,如果完成下載此消息,然後將它們添加到ListView。但是如果這個代碼我們將等待很長時間,程序將不會響應。你可以幫我嗎?如何多線程這個工作?

private void MailTree_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) 
{   
    MailList.Items.Clear(); 
    for (int i = 0; i < client.Folders.Count; i++) 
    {       
     (ContextMenuListView.Items[1] as ToolStripMenuItem).DropDownItems[i].Click += new EventHandler(MainForm_Click); 
    } 
    if (MailTree.SelectedNode.Text == Username) 
    { 
     webBrowser1.Visible = false;//webBrowser1.DocumentText = "Hello Baby"; 
     AttachmentList.Visible = false; 
     groupBox1.Visible = false; 
    } 
    else 
    { 
     webBrowser1.Visible = true; 
     groupBox1.Visible = true; 

     try 
     { 
      messages = client.Folders[MailTree.SelectedNode.Text].Search("ALL", false); // Search mail in your choossen Folder 
      AmoutOfMail = messages.Count(); //Amout of Mail in this Folder           
      for (int i = 0; i < AmoutOfMail; i++) 
      { 
       mes = messages[i]; 

       SaveMail(mes); // dowload mes and store message 

       ListViewItem item = new ListViewItem(); 
       Mime m = EncodingMail(MailTree.SelectedNode.Text, mes); // read mes from place store message 
       item.Text = mes.MessageUid.ToString(); 
       item.SubItems.Add(m.MainEntity.Subject); 
       ReturnMime(m); 
       if (mailfromname != null) 
        item.SubItems.Add(mailfromname); 
       else 
        item.SubItems.Add(mailfrom); 
       item.SubItems.Add(m.MainEntity.Date.ToString()); 
       item.SubItems.Add(mailfrom); 
       MailList.Items.Add(item); 
      } 
     }           
     catch (Exception) 
     { }             
    } 
} 

回答

2

是的。

看看Tasks library可以將任何你想要的東西卸載到不同的線程上。

只要確保您使用Controls.InvokeRequired將回調代碼放回UI線程。您不應該從UI線程以外的其他線程修改UI。

+0

如何在這裏使用十字線? – giaosudau 2011-05-14 02:05:06