Winform WebBrowser Control بطيئة للتحميل. أفضل طريقة للتحميل المسبق؟

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

سؤال

لدينا عرض موجز في تطبيق WinForm الخاص بنا والذي يستخدم عنصر تحكم WebBrowser لعرض المعلومات الموجزة من صفحة ويب. نحن نستخدم هذا لاكتساب بعض التصميمات الجدولية الغنية التي لم نتمكن من تحقيقها باستخدام عناصر تحكم Winform القياسية. في المرة الأولى التي يتم فيها عرض العرض على العميل ، يستغرق الأمر بعض الوقت للدوران (إطلاق IE في الخلفية التي أفترضها) ويتجمد التطبيق لبضع ثوانٍ. أنا أفكر في نوع من ميكانيكي التحميل المسبق من شأنه أن يحصل على نسج في الخلفية ويود بعض التوجيه المجتمعي.

أنا أفكر في إطلاق نموذج خارج الشاشة أو غير مرئي مع عنصر تحكم WebBrowser في App Start أو تشغيل مثيل IE في نوع ما من سلسلة الجانبية عند بدء التطبيق.

أي اقتراحات؟

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

المحلول

يمكنك التحميل مسبقًا عناصر التحكم أثناء بدء تشغيل التطبيق ، في موضوع منفصل. لاحظ حالة شقة STA ، وهي إلزامية إذا كنت ترغب في معالجة بعض كائنات COM (مثل WebBrowser).

public static class ControlPreloader
{


    public static void PreloadAsync()
    {
        var thread = new Thread(Preload);
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }

    private static void Preload()
    {
        using (var hostForm = new Form())
        {
            var control = new WebBrowser();
            hostForm.Controls.Add(control);
            control.CreateControl();

            hostForm.Close();
        }
    }

}

نصائح أخرى

لم أختبر بدء التشغيل الذي ذكرته ، ولكن كفكرة ، في بدء التشغيل ، يمكنك التنقل إليها about:blank. ثم في المتصفح DocumentCompleted حدث يمكنك بدء التنقل إلى عنوان URL المناسب. قد يساعدك ذلك في فهم ما إذا كان "IE spin-up" الذي يستغرق طوال الوقت أو استعلام المحتوى وتقديمه.

فيما يتعلق بالهندسة المعمارية الخاصة بك ، ما لم يتم تصميم "التخطيط الجدولي الغني" بالطبع بالفعل وعمله بكامل طاقته ، فقد تفكر في استخدام WPF (يحتوي على قصة تكامل WinForms جيدة أيضًا) من أجل الحصول على بعض الضوابط الأكثر ثراءً وجنسًا في تطبيقك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top