4

Web サービス オブジェクト (SoapHttpClientProtocol から継承) を作成し、Async メソッドを使用すると、Windows GUI スレッドでコールバックが行われることに気付きました。

  1. これがどのように機能するか知っている人はいますか?
  2. どうすれば同じことを達成できますか。

GUIスレッドでコールバックが常に発生していると確信している場合、これにより、GUIフォームでInvokeRequiredをチェックする必要がなくなると思います。

4

3 に答える 3

4

AsyncOperationmanager.SynchronizationContextを使用して同期コンテキストを静的に取得していると思われます。これにより、コールバックを適切に投稿できます。

于 2008-10-21T09:44:55.893 に答える
2

素晴らしい。答えてくれてありがとう。どちらのオプションも機能し、長所があるようです。

これが私がテストに使用したサンプルコードです:

    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";
        }
    }
于 2008-10-21T11:22:21.893 に答える
1

メイン スレッドで WindowsFormsSynchronizationContext オブジェクトを作成し、別のスレッドでその Send メソッドを呼び出すことができます。

于 2008-10-21T10:14:48.097 に答える