سؤال

ولست بحاجة للحصول على معلومات حول الأنماط CSS المطبقة في صفحة HTML. كنت AxWebBrowser وتكرار IHTMLDOMNode. أنا قادرة على الحصول على جميع البيانات ولست بحاجة ونقل الشفرة في طلبي. والمشكلة هي أن هذا الجزء يعمل داخل عامل الخلفية وحصلت على استثناء عند محاولة إنشاء مثيل عنصر التحكم.

AxWebBrowser browser = new AxWebBrowser();

ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated
because the current thread is not in a single-threaded apartment.

هل هناك أي طريقة كيفية حل هذا أو خيار آخر سوى AxWebBrowser؟

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

المحلول

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

ويمكنك حل هذا عن طريق إنشاء موضوع نفسك وتحديد الدولة شقة STA على الموضوع.

var t = new Thread(MyThreadStartMethod);
t.SetApartmentState(ApartmentState.STA);
t.Start();

نصائح أخرى

والمضي قدما وإضافة [STAThread] إلى المدخل الرئيسي من التطبيق الخاص بك، وهذا يدل على طراز مؤشر الترابط COM هو شقة ترابط واحد (STA)

وعلى سبيل المثال:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new WebBrowser());
    }
}

إذا كنت تستخدم [STAThread] إلى المدخل الرئيسي من التطبيق الخاص بك ولا يزال الحصول على خطأ قد تحتاج لجعل على خيط آمن دعوة لسيطرة ... شيء من هذا القبيل أدناه. في حالتي مع نفس المشكلة الحل التالي عملت!

Private void YourFunc(..)
{
    if (this.InvokeRequired)
    {
        Invoke(new MethodInvoker(delegate()
        {
           // Call your method YourFunc(..);
        }));
    }
    else
    {
        ///
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top