小编Ala*_*ter的帖子

将基于事件的代码转换为Rx

我有以下代码(简化用于发布目的).

public class SomeDataObject
{
    public delegate void ReadyEventHandler;
    public delegate void ErrorEventHandler;

    public event ReadyEventHandler Ready;
    public event ErrorEventHandler Error;
    ...
}

pubic class ConsumerClass
{
    private SomeDataObject dataObject;

    private Task<List<string>> GetStrings()
    {
        List<string> results = new List<string>();
        var tcs = new TaskCompletionSource<List<string>>();

        SomeDataObject.ReadyEventHandler ReadyHandler = null;
        SomeDataObject.ErrorEventHandler ErrorHandler = null;

        ReadyHandler += () =>
        {
            for (int i =0; i < dataObject.ItemCount; i++)
                results.Add(dataObject[i].ToString());

            tcs.TrySetResult(results);
        }

        ErrorHandler += ()
        {
            tcs.TrySetException(new Exception("oops!");
        }

        dataObject.Ready += ReadyHandler;
        dataObject.Error += …
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

6
推荐指数
1
解决办法
511
查看次数

WPF MahApps.Metro AnimatedSingleRowTabControl FontSize

使用 MahApps.Metro AnimatedSingleRowTabControl 时如何更改选项卡的字体大小。

使用普通 TabControl 时,我的主题 TabItem(基于 MetroTabItem)覆盖字体大小,但这不适用于动画单行选项卡控件。我尝试在 XAML 中的控件上设置 fontsize 属性,但这也不起作用。

问候艾伦

wpf tabcontrol mahapps.metro

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

MVVM Light Messenger 接收方法

我正在使用 MVVM Light 在两个 ViewModel 之间发送消息。在接收 VM 中,我正在尝试以下操作

Messenger.Default.Register<NotificationMessage>(this, async (msg) => {
    await HandleMessage(msg);
});

private async Task HandleMessage(NoficationMessage message)
{
    ... code using await
}
Run Code Online (Sandbox Code Playgroud)

第一次发送消息(通过单击按钮)时,异步方法运行。下次发送消息时什么也不会发生 - 方法不会被调用(通过断点检查)。

以这种方式在 Register 方法上允许异步吗?

什么是解决方法?

c# wpf mvvm mvvm-light

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

单元测试使用Wait的方法进行Reactive Extensions

我试图对在IObservable上使用Wait()方法的方法进行单元测试,但是我的测试永远不会完成 - Wait永远不会完成.我的测试包含以下内容:

var scheduler = new TestScheduler();
var input1 = scheduler.CreateColdObservable<List<string>>(
   new Recorded<Notification<List<string>>>(100, Notification.CreateOnNext(new List<string> { "John", "Harry" })),
   new Recorded<Notification<List<string>>>(200, Notification.CreateOnCompleted<List<string>>())
          );
Run Code Online (Sandbox Code Playgroud)

我正在使用Moq通过返回input1来设置我的方法的响应.例如

myObj.Setup(f => f.GetStrings()).Returns(input1);
Run Code Online (Sandbox Code Playgroud)

关于myObj的细节实际上并不重要.我启动调度程序并调用包含Wait的方法(例如我调用的方法中的某个地方)

var results = myObj.GetStrings().Wait();
Run Code Online (Sandbox Code Playgroud)

但这永远不会回来.我怀疑我使用调度程序错误,但我不确定.

关心艾伦

unit-testing system.reactive c#-4.0

2
推荐指数
1
解决办法
2142
查看次数