我使用背景工人在我的應用後臺輔助線程問題
我的代碼爲這個
void CreateThreadForEachServer()
{
DataAccess oDA = new DataAccess();
List<Server> allServerData = oDA.GetAllServers();
foreach (Server serverData in allServerData)
{
backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
backgroundWorker.RunWorkerAsync(serverData);
}
}
void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Server server = (Server)e.Argument;
CreateSnapshotForEachServer(server);
}
void CreateSnapshotForEachServer(Server server)
{
DataAccess oDA = new DataAccess();
MsmqMessageFormat message = new MsmqMessageFormat();
try
{
message = new Queue().ReadMessageFromMSMQ(server.ServerName);
}
catch
{
}
}
我的問題是,當我在後臺工作調用此方法
try
{
message = new Queue().ReadMessageFromMSMQ(server.ServerName);
}
catch
{
}
那麼我不能夠稱這種方法只是從MSMQ讀取消息
但是,當我不要使用後臺工作只是調用這個方法在簡單的線程這樣
void CreateThreadForEachServer()
{
DataAccess oDA = new DataAccess();
List<Server> allServerData = oDA.GetAllServers();
foreach (Server serverData in allServerData)
{
ThreadStart t = delegate { CreateSnapshotForEachServer(serverData); };
Thread td = new Thread(t);
td.Priority = ThreadPriority.Highest;
td.Start();
}
}
,則此方法調用中正確
try
{
message = new Queue().ReadMessageFromMSMQ(server.ServerName);
}
catch
{
}
什麼是後臺工作的問題,我的Queue類是這個樣子
class Queue
{
public MsmqMessageFormat ReadMessageFromMSMQ(string queueName)
{
MessageQueue messageQueue = null;
messageQueue = new MessageQueue(@".\Private$\" + queueName);
messageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(MsmqMessageFormat) });
System.Messaging.Message msg = null;
System.Messaging.Message[] allMessages = messageQueue.GetAllMessages();
if (allMessages.Length > 0)
{
msg = messageQueue.Receive();
MsmqMessageFormat readMessage = (MsmqMessageFormat)(msg.Body);
return readMessage;
}
else
{
return null;
}
}
}
和MsmqMessageFormat類是這樣
[Serializable]
public class MsmqMessageFormat
{
public Zvol Zvol { get; set;}
public List<PolicyInterval> listPolicyIntervalInfo = new List<PolicyInterval>();
}
擺脫那隻蒼蠅空的捕捉塊,以便您可以診斷問題。發佈異常的堆棧跟蹤如果沒有幫助。 – 2011-01-31 13:38:58
你有什麼實際的問題。 – CodingBarfield 2011-01-31 13:49:50