Можно создать дубликат:
Cross thread problem?проблема с перекрестными потоками? C#
У меня есть проблема, когда я называю эту тему. Моя идея - когда вы выбираете папку mail - do Func1 является MessageCollections() , когда Func1 заканчивается, а затем Download Mail in Folder - Func2 is SaveMail() , когда загрузка заканчивается одной почтой, а затем добавляет элемент в listview - Func3 - это AddMesToMailList() , но что-то не так в моем коде, вы можете мне помочь? Ошибка: Поперечные нити в линии MailTree.SelectedNode.Text
private delegate void SaveMailDelegate();
private void AddMesToMailList(IAsyncResult ia)
{
ListViewItem item = new ListViewItem();
Mime m = EncodingMail(MailTree.SelectedNode.Text, mes);
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);
}
private delegate ImapX.MessageCollection SelectMailFolder(string foldername);
ImapX.MessageCollection MessageCollections(string foldername)
{
return messages=client.Folders[foldername].Search("ALL", false);
}
public void SaveMail()
{
string path1= "D:\\" ;
string path2=Username;
string path3=MailTree.SelectedNode.Text;
string path4 = mes.MessageUid.ToString() + ".eml";
// @"D:\" + Username + "\\" + MailTree.SelectedNode.Text + "\\" + mes.MessageUid.ToString() + ".eml")\
string path=Path.Combine(path1,path2,path3,path4);
string savepath = Path.Combine(path1, path2, path3);
if (!File.Exists(path))
{
mes.Process();
mes.SaveAsEmlToFile(savepath, mes.MessageUid.ToString()); //Store messages to a Location
}
}
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;
string select = MailTree.SelectedNode.Text;
//messages = client.Folders[select].Search("ALL", false);// Search mail in your choossen Folder
SelectMailFolder se = null;
se += new SelectMailFolder(MessageCollections);
se.BeginInvoke(select,new AsyncCallback(NewMethod), null);
}
}
private void NewMethod(IAsyncResult ias)
{
AmoutOfMail = messages.Count(); //Amout of Mail in this Folder
for (int i = 0; i < AmoutOfMail; i++)
{
mes = messages[i];
SaveMailDelegate del = null;
del += new SaveMailDelegate(SaveMail);
IAsyncResult ia = del.BeginInvoke(new AsyncCallback(AddMesToMailList), null);
}
}
«но что-то неправильно в моем коде»: Это всегда хорошо, чтобы указать, что вы считаете неправильным/почему вы думаете, что это неправильно/любые ошибки, которые вы получаете. – forsvarir
Что-то не так ...? , как бы любой орган на земле знал, в чем проблема, с которой вы сталкиваетесь. Задайте вопрос – TalentTuner
@forsvarir: потому что есть ошибка в перекрестных потоках: | – giaosudau