Вам нужно будет зарегистрировать PropertyChangedCallback с метаданными свойств.
Причина в том, что свойства зависимостей, установленные в XAML или привязками или каким-либо другим источником, не вызывают оболочку CLR (метод сеттера). Причина объясняется в статье XAML по загрузке и зависимости свойств в MSDN:
. По соображениям реализации, это вычислительно дешевле для идентификации свойства как свойства зависимостей и получить доступ к методу SetValue системы свойств, чтобы установить его, а не использовать оболочку свойств и ее сеттер.
...
Поскольку текущая реализация WPF поведения процессора XAML для настройки свойств полностью обходит оболочки, вы не должны вводить какую-либо дополнительную логику в определения множества обертки для вашего пользовательского свойства зависимостей. Если вы установите такую логику в определение набора, тогда логика не будет выполняться, если свойство задано в XAML, а не в коде.
blockquote>Ваш код должен выглядеть так:
public static readonly DependencyProperty IsClosedProperty = DependencyProperty.Register( "IsClosed", typeof(bool), typeof(GroupBox), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender, (o, e) => ((GroupBox)o).OnIsClosedChanged())); public bool IsClosed { get { return (bool)GetValue(IsClosedProperty); } set { SetValue(IsClosedProperty, value); } } private void OnIsClosedChanged() { _rowDefContent.Height = new GridLength((IsClosed ? 0 : 1), GridUnitType.Star); }
Нет ничего эквивалентного wait ()
. Обычной практикой является опрос с использованием kill (pid, 0)
и поиск возвращаемого значения -1 и errno
из ESRCH
, чтобы указать, что процесс завершен.
Может быть, можно подождать, пока / proc / [pid] или / proc / [pid] / [что-то] исчезнет?
Есть функции poll () и другие функции ожидания событий файла, может быть что может помочь?
На BSD и OS X вы можете использовать kqueue с EVFILT_PROC + NOTE_EXIT, чтобы сделать именно это. Опрос не требуется. К сожалению, нет Linux-эквивалента.
Вы также можете создать сокет или FIFO и читать по ним. FIFO особенно прост: соедините стандартный вывод вашего ребенка с FIFO и прочтите. Чтение будет блокироваться до тех пор, пока ребенок не выйдет (по любой причине) или пока он не выдаст какие-то данные. Поэтому вам понадобится небольшой цикл, чтобы отбросить ненужные текстовые данные.
Если у вас есть доступ к источнику дочернего элемента, откройте FIFO для записи при его запуске, а затем просто забудьте об этом. ОС очистит дескриптор открытого файла, когда дочерний процесс завершится, и ваш ожидающий «родительский» процесс проснется.
Теперь это может быть процесс, который вы не запускали или которым не владеете. В этом случае вы можете заменить исполняемый двоичный файл сценарием, который запускает настоящий двоичный файл, но также добавляет мониторинг, как описано выше.
Мне неизвестно. Помимо решения проблемы хаоса, вы можете использовать семафоры, если можете изменить программу, которую хотите дождаться.
Библиотечные функции: sem_open (3)
, sem_init (3),
sem_wait (3),
...
sem_wait (3)
выполняет ожидание, поэтому вам не нужно выполнять ожидание, как в случае с хаосом. Конечно, использование семафоров делает ваши программы более сложными, и, возможно, это не того стоит.