小编Dan*_*erg的帖子

在Reactive Extensions for .NET中使用Observable.FromEventPattern时,如何避免任何阻塞?

我正在努力解决关于订阅Observable.FromEventPattern()on的问题上的一些并发问题TaskPoolScheduler.

让我用代码示例来说明:

var dataStore = new DataStore();

Observable.FromEventPattern<DataChangedEventArgs>(dataStore, nameof(dataStore.DataChanged))
    .SubscribeOn(TaskPoolScheduler.Default)
    .Select(x => x.EventArgs)
    .StartWith(new DataChangedEventArgs())
    .Throttle(TimeSpan.FromMilliseconds(25))
    .Select(x => 
    {
        Thread.Sleep(5000); // Simulate long-running calculation.
        var result = 42;
        return result;
    })
    .ObserveOn(new SynchronizationContextScheduler(SynchronizationContext.Current))
    .Subscribe(result =>
    {
        // Do some interesting work with the result.
        // ...

        // Do something that makes the DataStore raise another event.
        dataStore.RaiseDataChangedEvent(); // <- DEADLOCK!
    });

dataStore.RaiseDataChangedEvent(); // <- Returns immediately, i.e. does NOT wait for long-running calculation.
dataStore.RaiseDataChangedEvent(); // <- …
Run Code Online (Sandbox Code Playgroud)

c# multithreading system.reactive observable

8
推荐指数
1
解决办法
649
查看次数

如何在UWP中编写自定义选择器控件?

我一直在仔细搜索网络,以获取有关此方面的任何指导,讨论或经验,我认为我可以肯定地说没有任何东西。

我们正在为UWP开发一套控件,我们计划将其开源并免费提供。我们正在构建的控件之一是TimeSpanPicker控件,其外观和行为本质上与TimePicker控件类似,但是它不仅限于一天中的某个时间(即24小时间隔),还允许用户编辑任意内容TimeSpan

通过使用内置TimePicker控件作为参考,从Windows Runtime API的可见元数据中整理出的内容,使我意识到涉及以下类型的组件:

  • 继承自的TimePicker控件本身Control
  • 继承自的TimePickerFlyoutPickerFlyoutBase
  • TimePickerFlyoutPresenter控制,其从继承Control

我意识到我需要模仿这种模式并为选择器控件编写这三个组件,但是我找不到有关这些组件如何组合在一起的信息,仅凭API表面,我认为不可能弄清楚。

具体来说,我想了解的主要内容是:

  • 如何TimePickerFlyout纳入TimePicker班级?我在选择器控件的默认模板内的任何地方都看不到弹出按钮的引用。
  • 起什么作用的TimePickerFlyoutPresenter控制播放,以及它是如何并入TimePickerFlyout类?本TimePickerFlyout类没有模板-那么它是如何实例化和与通信TimePickerFlyoutPresenter控制?
  • 模仿此模式的基本步骤是什么?
  • ShouldShowConfirmationButtonsOnConfirmed虚拟方法的预期用途是PickerFlyoutBase什么?当我在具体的实现中覆盖它们时,就永远不会调用它们。

如有任何指导,我将非常感谢!

xaml flyout win-universal-app uwp-xaml

5
推荐指数
1
解决办法
889
查看次数