У меня проблема с возвратом объекта, созданного в другом потоке.Ситуация такова, что мое приложение должно отправить запрос на удаленный сервер и дождаться ответа.В основном потоке (1) у меня есть метод с именем SendAndWait.Этот метод помещает сообщение в очередь сообщений для отправки и ожидает ответа.Другой поток (2) отправляет сообщения в очередь.Третий поток (3) получает сообщения и возвращает в основной поток (1) сообщение с их ответом.
Это мой код.
Тема 1:
void SendAndWait()
{
AutoResetEvent waitForAnswer = new AutoResetEvent(false);
int msgReferenceNumber = 1;
MyMessage msg;
// Register to wait for answer to the message with the number = msgReferenceNumber
RegisterToWait(msgNumber, waitForAnswer, ref msg);
// Send the request to the server, with the reference number.
SendRequest(msgReferenceNumber);
// Wait until the server send my answer
waitForAnswer.WaitOne();
// Now I have my answer. BUT I HAVE msg == null
MessageBox.Show(msg.Text);
}
Тема 2:
public class WhoWait
{
public int RefNumMsg;
public AutoResetEvent WaitForAnswer;
public MyMessage MessageWithAnswer;
}
// In this Dicctionary I save who wait for answers.
private Dictionary<int, WhoWait> Waiting = new Dictionary<WhoWait>();
void RegisterToWait(int msgRefNumber, AutoResetEvent waitForAnswer, ref msgWithAnswer)
{
WhoWait w = new WhoWait();
w.RefNumMsg = msgRefNumber;
w.WaitForAnswer = waitForAnswer;
w.MessageWithAnswer = msgWithAnswer;
Waiting.Add(msgRefNumber, w);
}
Тема 3:
void OnRecieve()
{
// Get data from server
MyMessage msg = GetMessageData();
// Search for someone waiting for this answer
WhoWait w = Wainting[msg.RefNum];
// Set the response message
w.MessageWithAnswer = msg;
// Warn to the main thread. Message with their answer arrive
w.WaitForAnswer.Set();
}
Все работает, кроме ссылки на Сообщение.Когда я читаю объект, я передаю ему ключ ref, у меня ноль.
Может ли кто-нибудь мне помочь?
Заранее спасибо.