Мой пользовательский элемент управления - это граница , которая была изменена для поддержки привязанного FrameID , которое пользователь библиотеки будет определять как enum в клиентском XAML, который они разрабатывают. Как показано ниже, свойство FrameID либо "IS", либо "не" установлен.
< /code>
Идентификатор используется для начальной загрузки приложения путем запуска поток обнаружения в фоновом режиме. Это перечисление может занять секунду или два, но пользовательский интерфейс стремится сохранять отзывчивые запуска, не ожидая этого. Основная задача заключается в надежном обнаружении, не было ли установлено назначение свойств < /em> в XAML, чтобы одноразовое обнаружение можно было запустить в конфигурации по умолчанию. < /P>
[b] мой вопрос [/b]
это [b] с уверенностью предположить [/b], что конструктор и инициализатор объекта [b] гарантированно [/b] выполнить последовательно [b] без прерывания [/b] в потоке пользовательского интерфейса, на котором их вызывают?
Потому что Если ответ «да» < /em>, тогда мой предпочтительный вариант очень наполнен, он, кажется, работает отлично, и я считаю, что это представляет собой худший пример путем настройки задержка на один тик. У меня есть как минимум два других способа, которыми я мог обнаружить это, но они менее оптимальны. Конечно, если вы можете подумать о любой альтернативе, которая достигает цели более надежным образом, я слушаю. Frameid < /h5>
enum Reserved { DefaultId, }
interface IDiscoveryMonitor { event EventHandler Discovered; }
class FrameWithId : Border, IDiscoveryMonitor
{
public FrameWithId()
{
Stroke = SolidColorBrush.Transparent;
var idB4 = FrameId;
Task
.Delay(TimeSpan.FromTicks(1))
.GetAwaiter()
.OnCompleted(() =>
{
// - This ASSUMES that CTOR and Object Initializer cannot
// be separated in time under any circumstances.
// - This assumption APPEARS TO BE RELIABLE HERE.
// - But IS IT REALLY ???
var idFtr = FrameId;
Debug.WriteLine($"ID Before {idB4} => ID After {idFtr}");
if(Equals(idFtr, Reserved.DefaultId))
{
// The ID has 'not' been set so run discovery for default.
_ = MockRunDiscovery();
}
});
}
.
.
.
Мой пользовательский элемент управления - это граница , которая была изменена для поддержки привязанного FrameID , которое пользователь библиотеки будет определять как enum в клиентском XAML, который они разрабатывают. Как показано ниже, свойство FrameID либо "IS", либо "не" установлен.[code]
< /code> Идентификатор используется для начальной загрузки приложения путем запуска поток обнаружения в фоновом режиме. Это перечисление может занять секунду или два, но пользовательский интерфейс стремится сохранять отзывчивые запуска, не ожидая этого. Основная задача заключается в надежном обнаружении, не было ли установлено назначение свойств < /em> в XAML, чтобы одноразовое обнаружение можно было запустить в конфигурации по умолчанию. < /P>
[b] мой вопрос [/b] это [b] с уверенностью предположить [/b], что конструктор и инициализатор объекта [b] гарантированно [/b] выполнить последовательно [b] без прерывания [/b] в потоке пользовательского интерфейса, на котором их вызывают? Потому что Если ответ «да» < /em>, тогда мой предпочтительный вариант очень наполнен, он, кажется, работает отлично, и я считаю, что это представляет собой худший пример путем настройки задержка на один тик. У меня есть как минимум два других способа, которыми я мог обнаружить это, но они менее оптимальны. Конечно, если вы можете подумать о любой альтернативе, которая достигает цели более надежным образом, я слушаю. Frameid < /h5> enum Reserved { DefaultId, }
class FrameWithId : Border, IDiscoveryMonitor { public FrameWithId() { Stroke = SolidColorBrush.Transparent; var idB4 = FrameId; Task .Delay(TimeSpan.FromTicks(1)) .GetAwaiter() .OnCompleted(() => { // - This ASSUMES that CTOR and Object Initializer cannot // be separated in time under any circumstances. // - This assumption APPEARS TO BE RELIABLE HERE. // - But IS IT REALLY ??? var idFtr = FrameId; Debug.WriteLine($"ID Before {idB4} => ID After {idFtr}"); if(Equals(idFtr, Reserved.DefaultId)) { // The ID has 'not' been set so run discovery for default. _ = MockRunDiscovery(); } }); } . . . [/code]