Я использую фон рабочего в моей заявкефона Проблема Worker Thread
мой код для этого
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
{
}
что проблема с фоном рабочего мой класс Очереди как этот
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>();
}
Избавьтесь от этого ловушечного пустого блока catch, чтобы вы могли диагностировать проблему. Поместите трассировку стека исключения, если это не поможет. –
Какова проблема, с которой вы столкнулись. – CodingBarfield
, когда я вызываю метод из фонового рабочего public MsmqMessageFormat ReadMessageFromMSMQ (string queueName), этот метод не называется – viky