我有一个函数可以从DocuShare服务器下载邮件消息作为MSG文件。当从主线程调用该函数时,该函数完美工作。但是,当我在一个单独的线程中调用该函数时,下载失败。当我介入代码时,我可以看到该函数正在被调用,所有参数都被正确计算,返回值就是我所期望的。不幸的是,我看到,没有文件被下载。C#2.0函数在单独线程中调用时不起作用
代码:
private void btnDownloadMails_Click(object sender, EventArgs e)
{
//Thread t = new Thread(new ThreadStart(DownloadMailAsMsg));
//t.Start(); //Does not work
DownloadMailAsMsg(); // Works fine
}
void DownloadMailAsMsg()
{
DSServerMap.Server dsserver = new DSServerMap.Server();
if (!SelectMappedServer(ref dsserver, textServer.Text.ToString()))
return;
long status = 0;
dsserver.DocuShareAddress = textServer.Text;
dsserver.UserName = textUser.Text;
dsserver.Password = textPwd.Text;
status = dsserver.Logon();
if (status == 0)
{
IItemObj objParentItem;
string[] emailHan = { "MailMessage-12", "MailMessage-13", "MailMessage-31" };
foreach (string handnum in emailHan)
{
objParentItem = (IItemObj)dsserver.CreateObject(handnum);
DSGATEWAYLib.IGatewayHandler gateway = (DSGATEWAYLib.IGatewayHandler)dsserver.Open();
objParentItem.AttachGateway(gateway, true);
objParentItem.Name = @"D:\em\m_" + handnum + ".msg";
int flag = objParentItem.DSDownload(0);
}
}
}
任何想法?
感谢 普拉卡什
但是,我怀疑这是否是主要原因:您甚至不应该在非UI线程上讨论所有那些'.Text'属性。理想情况下,您应该先获得并将其传递给工作人员。 – 2010-10-13 10:46:56