Когда я могу расположить управление IDisposable WPF, например, WindowsFormsHost?

Ваш входной файл выглядит следующим образом:

3[endline]
first fr random 5[endline]
second          9[endline]
third shazam    2[endline]

Обратите внимание на добавленные мной [endline]: они могут быть '\n', '\r\n' в зависимости от системы, сгенерировавшей файл.

Ваша первая инструкция:

in >> n;

a форматированное чтение ввода: вы просите прочитать целое число из файла, поэтому будут прочитаны только те символы, которые могут образовывать действительные целые числа .

Это означает, что после этой инструкции оставшаяся часть файла будет иметь вид:

[endline]
first fr random 5[endline]
second          9[endline]
third shazam    2[endline]

Остальная часть вашего кода читает необработанные байты, поэтому он также будет читать первый [endline] (и печатать он).

Как и предполагалось в комментариях, не следует использовать массивы переменной длины , так как они не являются частью какого-либо стандарта C ++ (но являются частью стандарта C). Попробуйте вместо этого использовать стандартную библиотеку C ++ .

12
задан morechilli 31 October 2008 в 17:48
поделиться

4 ответа

Создание из ответа Todd, я предложил это универсальное решение для любого управления WPF, которое размещается Окном и want's для гарантии распоряжения, когда то окно закрывается.

(Очевидно, если можно постараться не наследоваться IDisposable, делают, но иногда Вы просто не можете),

Расположите назван, когда первое родительское окно в иерархии закрывается.

(Возможное улучшение - изменяет обработку событий для использования слабого шаблона),

public partial class MyCustomControl : IDisposable
    {

        public MyCustomControl() {
            InitializeComponent();

            Loaded += delegate(object sender, RoutedEventArgs e) {
                System.Windows.Window parent_window = Window.GetWindow(this);
                if (parent_window != null) {
                    parent_window.Closed += delegate(object sender2, EventArgs e2) {
                        Dispose();
                    };
                }
            };

            ...

        }

        ...
    }
4
ответ дан 2 December 2019 в 22:23
поделиться

В случае завершения работы приложения нет ничего, что необходимо сделать для надлежащего избавления от WindowsFormsHost. Так как это происходит из расположения HwndHost, обрабатывается, когда Диспетчер является завершением работы. При использовании Отражателя, Вы будете видеть, что, когда HwndHost инициализируется, он создает WeakEventDispatcherShutdown.

Если Вы используете его в диалоговом окне лучшее, я могу предложить, должен переопределить OnClosed и избавиться от Вашего Хоста затем, иначе HwndHost будет бродить вокруг, пока до Диспетчера не будет завершение работы.

public partial class Dialog : Window
{
    public Dialog()
    {
        InitializeComponent();
    }

    protected override void OnClosed(EventArgs e)
    {
        if (host != null)
            host.Dispose();

        base.OnClosed(e);
    }
}

Простой способ протестировать, когда располагают, называют, должен получить пользовательский класс из WindowsFormsHost и игры вокруг с различными ситуациями. Вставьте точку останова, располагают и видят, когда это называют.

public class CustomWindowsFormsHost : WindowsFormsHost
{
    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
    }
}
8
ответ дан 2 December 2019 в 22:23
поделиться

Вы не должны располагать средства управления при закрытии формы, API сделает это для Вас автоматически, если управление будет в визуальном дереве формы (как ребенок формы или другого управления в форме)

-1
ответ дан 2 December 2019 в 22:23
поделиться

Средства управления WPF не реализуют интерфейс IDisposable, потому что у них нет ничего для расположения (Никакие дескрипторы для чистки, никакая неуправляемая память для выпуска). Все, что необходимо сделать, удостоверяются, что у Вас нет ссылок на средства управления, и GC уберет их.

Поэтому WPF использует слабые шаблоны события, чтобы гарантировать, что средства управления могут быть собраны "мусор". Это - шаблон, который необходимо реализовать для обеспечения очистки, не IDisposable.

-1
ответ дан 2 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: