مضيفا الطفل على Viewport3D بشكل غير متزامن يعطي "تم الوصول إلى هذه API مع الحجج من السياق غير صحيح".

StackOverflow https://stackoverflow.com/questions/1808417

سؤال

وعندما أحاول إضافة 3D المحتوى إلى Viewport3D، بشكل متزامن، وهذا يؤدي إلى "تم الوصول إلى هذه API مع الحجج من السياق غير صحيح". في TargetInvocationException.

ويتم إنشاء المحتوى 3D من البيانات من جهاز المسح الضوئي 3D. الانتهاء من الاتصالات والعمليات الحسابية اللازمة لذلك في موضوع مستقل. أولا، حاولت أن الق وviewport3D من ذلك الموضوع. أدركت ينبغي أن يتم ذلك من خلال واجهة المستخدم الرسومية الخيط، وحتى الآن وأنا استخدم هذا الرمز:

        ModelVisual3D model = new ModelVisual3D();
        model.Content = scanline;

        DispatcherOperation dispOp = this.viewport.Dispatcher.BeginInvoke(
            new AddModelDelegate(StartAddModel), model);
    }
    private void StartAddModel(ModelVisual3D model)
    {
        this.viewport.Children.Add(model); 
        //model is not in the context of this current thread. 
        //Throws exception: "This API was accessed with arguments from the wrong context."
    }

    private delegate void AddModelDelegate(ModelVisual3D model);

ويبدو أن الكائن المسمى "نموذج" ليست في سياق الترابط الحالي. كيف يمكنني اصلاح هذا؟ هل هناك طريقة للحصول على نموذج لسياق مرسل؟ أم أن هذه الطريقة في القيام بذلك ليس فقط وسيلة للذهاب هنا؟

هل كانت مفيدة؟

المحلول

ويحدث هذا عندما سبق لك أن تولد / تعديل كائنات المشهد لإضافة لمنفذ العرض، من موضوع مختلف ومثيل ثم منفذ العرض واحد على. هناك عمل بسيط حولها. تغليف رمز يقوم بتحديث الأشياء منفذ العرض في وظيفة. إدراج المقتطف التالي وانت القيام به.

private delegate void MyFunctionDelegate();
void MyFunction()
{
     if(!Application.Current.Dispatcher.CheckAccess())
     {
         Application.Current.Dispatcher.Invoke(new MyFunctionDelegate(MyFunction));
         return; // Important to leave the culprit thread
     }
     .
     .
     .
     this.Viewport3D.Children.Remove(model);
     MyModifyModel(model);
     this.Viewport3D.Children.Add(model); 
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top