سؤال

لقد لاحظت أنه عند إنشاء خدمة ويب كائن (وراثة من SoapHttpClientProtocol) و يمكنك استخدام الأسلوب المتزامن يجعل رد على ويندوز واجهة المستخدم الرسومية الموضوع.

  1. لا أحد يعرف كيف يعمل هذا ؟
  2. كيف يمكن تحقيق نفس الشيء.

أعتقد هذا سيوفر لي الحاجة إلى مراجعة 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