문제

웹 서비스 객체 (soaphttpclientProtocol에서 상속)를 만들 때 Async 메소드를 사용하면 Windows GUI 스레드에서 콜백을 만듭니다.

  1. 이것이 어떻게 작동하는지 아는 사람이 있습니까?
  2. 어떻게 같은 것을 달성 할 수 있습니까?

콜백이 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 객체를 작성한 다음 다른 스레드에서 보내기 메소드를 호출 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top