如何对此作业进行多线程处理

本文关键字:多线程处理 作业 | 更新日期: 2023-09-27 17:56:13

我的想法是,如果完成下载此消息,然后将它们添加到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)
        { }                                                
    }
}

如何对此作业进行多线程处理

是的。

查看Tasks库,将您想要的任何内容卸载到不同的线程上。

只需确保使用 Controls.InvokeRequired 将回调代码放回 UI 线程即可。切勿从与 UI 线程不同的线程修改 UI。