سؤال

أنا أستخدم System.Windows.Forms.WebBrowser, ، لجعل عرض الصفحة الرئيسية لـ Visual Studio مشابهًا.ومع ذلك، يبدو أن عنصر التحكم يلتقط كافة الاستثناءات ويتعامل معها عن طريق إغراقها بصمت!لا داعي للقول أن هذا سلوك مؤسف للغاية.

void webBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
    // WebBrowser.Navigating event handler
    throw new Exception("OMG!");
}

سيؤدي الكود أعلاه إلى إلغاء التنقل وابتلاع الاستثناء.

void webBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
    // WebBrowser.Navigating event handler
    try
    {
        e.Cancel = true;
        if (actions.ContainsKey(e.Url.ToString()))
        {
            actions[e.Url.ToString()].Invoke(e.Url, webBrowser.Document);
        }
    }
    catch (Exception exception)
    {
        MessageBox.Show(exception.ToString());
    }
}

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

هل هناك أي طريقة لإخبار WebBrowser التحكم في التوقف عن إغراق الاستثناءات وإعادة توجيهها بالطريقة الطبيعية والمتوقعة؟أم أن هناك طريقة ماكرة لطرح استثناء عبر الحدود الأصلية؟

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

المحلول 2

أفضل رهان لدي هو سبب حدوث ذلك هو وجود حدود يديرها السكان الأصليون يجب عبورها.لا يقوم الجزء الأصلي بإعادة توجيه الاستثناءات المُدارة بشكل صحيح وليس هناك الكثير مما يمكن القيام به.

ما زلت آمل في الحصول على إجابة أفضل بالرغم من ذلك.

نصائح أخرى

لم أر المتصفح يأكل الاستثناءات، إلا إذا كنت تقصد أخطاء البرنامج النصي.يمكن تمكين أخطاء البرنامج النصي عبر browser.ScriptErrorsSuppressed ملكية.

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

يحرر لم يكن نموذج التعليمات البرمجية موجودًا عندما طلبت نموذج التعليمات البرمجية

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