다른 사람이 작성한 일부 코드를 이해하려고합니다. 나는 대체 무슨 일이 일어나는지 정확히 이해하지만, 정확히는 그렇지 않다. 문제는 해당 코드가 다른 스레드에서 실행되고 해당 두 번째 스레드에서 이벤트를 처리한다는 것입니다. 그러나 사용자에게 경고 메시지를 표시해야하며 UI가 첫 번째 스레드에서 실행 중이므로 두 번째 스레드의 경고가 표시되는 것은 물론 표시되지 않습니다. 그렇다면 첫 번째 스레드가 두 번째 스레드에서 검색 한 내 biz 개체를 전달하거나 마샬링하는 첫 번째 스레드로 "전환"하여 첫 번째 스레드가이를 처리하고 경고를 표시 할 수 있습니까? 나는 그런 상황에서 대리인을 사용할 것이라고 생각했지만 대리인은 여전히 두 번째 스레드에서 실행 중입니까? 첫 번째 스레드에 대한원래 스레드로 돌아 가기 경고 프롬프트를 표시하십시오.
public delegate void MessageReceivedEventHandler(object sender, MessageEventArgs args);
public class MessageEventArgs : EventArgs
{
...snip...
}
public class MSMQListenerService
{
...
public event MessageReceivedEventHandler MessageReceived;
....
public void Start()
{
...
//this is where we jump to a second thread as this method is IAsyncResult
_queue.BeginReceive();
...
}
....
}
코드 :
....snip...
x = new MSMQListenerService(@".\private$\abc");
x.MessageReceived += x_MessageReceived;
x.FormatterTypes = new Type[] { typeof(LoginStatusMessage) };
x.Start();
...snip....
void x_MessageReceived(object sender, MessageEventArgs args)
{
//this handler is running on a different thread???
//I'm OK with that just need to get the args back to the first thread
}
그래서 내가 게시물을 압도하지 않고 관련이있을 것이라고 생각 코드를 게시 한 다음
두 번째 스레드에 대한 코드입니다. 그래서 뭔가 빠져있는 경우 알려 주시기 바랍니다 그리고 나는 확실히 그것을 바로 추가 할 것입니다.
TIA JB는
확인 정보를 얻기 위해이 튜토리얼을 읽어 보는 것이 좋습니다. dispatcher.aspx – MarcinJuraszek