سؤال

لقد كتبت مؤخرًا مرئيًا مخصصًا لـ Visual Studio 2008 لأحد الأنواع المخصصة في طلبي. تتم كتابة واجهة المستخدم الخاصة بـ The Visualizer في WPF ويتم استضافتها في مضيف عناصر ويتم عرضها باستخدام كائن Windowservice الخاص بـ IdialOgVisualizerService.

كل شيء يعمل بشكل رائع ، ويتم تحميل المرئي الخاص بي ويظهر المعلومات ذات الصلة ، ولكن إذا حاول "تحرير ومتابعة" في طلبي بعد تحميل Visualizer ، تعطل Visual Studio دون أي رسالة خطأ مفيدة.

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

هنا هو رمز المرئي:

using System;
using System.Drawing;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Windows.Forms;
using System.Windows.Forms.Integration;
using Microsoft.VisualStudio.DebuggerVisualizers;
using ObjectVisualizerShared;
using ObjectVisualizerUI;

namespace ObjectVisualizer
{
    public class Visualizer : DialogDebuggerVisualizer
    {
        protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
            try
            {

                Stream stream = objectProvider.GetData();
                if (stream.Length > 0)
                {
                    BinaryFormatter formatter = new BinaryFormatter();
                    VisualizerNode node = (VisualizerNode)formatter.Deserialize(stream);
                    if (node != null)
                    {
                        VisualizerWindow window = new VisualizerWindow(node);
                        ElementHost host = new ElementHost();
                        host.Child = window;
                        host.Dock = DockStyle.Fill;
                        host.Size = new Size(800, 600);
                        windowService.ShowDialog(host);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Error!\n{0}", ex), "Object Visualizer");
            }
        }
    }
}

أيه أفكار؟

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

المحلول

على الرغم من أنني لم أجد حقًا إصلاحًا "مناسبًا" ، فقد وجدت حلًا مقبولًا.

لقد نقلت التصور الخاص بي إلى برنامج منفصل تمامًا ، ثم في مصحفي التصحيح الخاص بي ، أبدأ برنامج التصور في عملية منفصلة وأرسل كائن البيانات إليه باستخدام أنبوب اسمه.

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

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