Windows GUI 스레드에 메시지를 보냅니다
-
03-07-2019 - |
문제
웹 서비스 객체 (soaphttpclientProtocol에서 상속)를 만들 때 Async 메소드를 사용하면 Windows GUI 스레드에서 콜백을 만듭니다.
- 이것이 어떻게 작동하는지 아는 사람이 있습니까?
- 어떻게 같은 것을 달성 할 수 있습니까?
콜백이 GUI 스레드에서 항상 발생한다고 확신하면 GUI 양식에서 invokerequired를 확인해야한다고 생각합니다.
해결책
나는 그것이 사용한다고 생각합니다 AsyncoperationManager.synchronizationContext 정적으로 동기화 컨텍스트를 얻으려면. 그런 다음 콜백을 적절하게 게시 할 수 있습니다.
다른 팁
훌륭한. 답변 주셔서 감사합니다. 두 옵션 모두 작동하는 것처럼 보이며 강점이 있습니다.
다음은 테스트했던 샘플 코드입니다.
public partial class AsyncTest : Form
{
static void Main()
{
Application.Run(new AsyncTest());
}
AsyncOperation _operation;
SynchronizationContext _context;
TextBox _textBox;
public AsyncTest()
{
_operation = AsyncOperationManager.CreateOperation(null);
_context = WindowsFormsSynchronizationContext.Current;
_textBox = new TextBox();
this.Controls.Add(_textBox);
new Thread(AsyncThread).Start();
}
void AsyncThread()
{
_operation.Post(GuiThread, null);
_context.Post(GuiThread, null);
}
void GuiThread(object state)
{
_textBox.Text = _textBox.InvokeRequired ? "Didn't work" : "It Worked";
}
}
기본 스레드에서 WindowsFormsSynchronizationContext 객체를 작성한 다음 다른 스레드에서 보내기 메소드를 호출 할 수 있습니다.
제휴하지 않습니다 StackOverflow