小编use*_*190的帖子

Observable.FromAsync vs Task.ToObservable

有没有人知道何时使用其中一种方法而不是另一种方法.他们似乎做同样的事情,因为他们转换TPL TaskObservable.

Observable.FromAsync 似乎支持取消令牌,这可能是微妙的差异,如果处置了可观察量,则允许生成任务的方法参与合作取消.

只是想知道我是否遗漏了一些明显的问题,为什么你要使用一个而不是另一个.

谢谢

.net c# system.reactive

12
推荐指数
3
解决办法
6843
查看次数

如果值保持不变,WPF DataTrigger不会触发

我有一个WPF数据触发器,当值为true时设置为触发.

我希望每次将此值设置为true时触发此触发器,即使之前为真.不幸的是,如果值从true变为false或反之亦然,似乎只会触发.我的基础数据模型正在触发INotifyPropertyChanged的PropertyChanged事件,即使该值连续两次设置为true,但触发器似乎没有选择它.

无论如何,无论绑定值是否已更改,都会使触发器运行?

你们中的一些人已经要求代码,所以在这里.有趣的是,每次都会调用转换器.问题更具体到运行动画.

更新 如果我更改我的代码以将值重置为false,然后再次返回到true,则会触发动画.显然这并不理想,并且不会使代码很好阅读.我希望有更好的方法来做到这一点.

任何帮助非常感谢.

WPF代码

<Grid>
    <Grid.Resources>            
        <Storyboard x:Key="AnimateCellBlue">
            <ColorAnimation Storyboard.TargetProperty="Background.Color" From="Transparent" To="Blue" Duration="0:0:0.1" AutoReverse="True" RepeatBehavior="1x" />
        </Storyboard>
    </Grid.Resources>
    <TextBox Name="txtBox" Text="{Binding DataContext.DisplayText, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}">           
        <TextBox.Style>
            <Style TargetType="TextBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding DataContext.IsTrue, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Value="True">
                        <DataTrigger.EnterActions>                                                        
                            <BeginStoryboard Name="BidSizeUpStoryB" Storyboard="{StaticResource AnimateCellBlue}" />
                        </DataTrigger.EnterActions>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

代码背后: -

public partial class MainWindow : Window
{
    private DataItem _dataItem;
    private DispatcherTimer _dispatcherTimer;

    public MainWindow()
    {
        InitializeComponent();

        _dataItem = new DataItem();
        _dataItem.DisplayText = "Testing";
        _dataItem.IsTrue …
Run Code Online (Sandbox Code Playgroud)

wpf

7
推荐指数
1
解决办法
2312
查看次数

如何使用Moq模拟ILogger/ILoggerService

我正在为View Model类编写一些单元测试.该类的构造函数注入ILoggerService.该接口定义了一个返回ILogger的方法GetLog.类似于下面的东西,代表一个实现ILoggable的类: -

protected ViewModelBase(ILoggerService loggerService)
    {
        Logger = loggerService.GetLog(this);
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试对我的CreateNewOrder方法进行单元测试,如下所示:

private void CreateNewOrder(INewOrderViewModel newOrderViewModel)
    {
        Logger.Log("Sending Create New Order Message", LogCategory.Info);
        var createNewOrderMessage = new OrderMessage(newOrderViewModel);
        _eventAggregator.GetEvent<CreateOrderEvent>().Publish(createNewOrderMessage);
    }
Run Code Online (Sandbox Code Playgroud)

我将如何模拟ILoggerService以便返回有效的Logger?目前,我的Unit测试会抛出一个NullReferenceExeception.

我正在用Moq做我的嘲笑.

我想我需要做一些事情

var loggerService = new Mock<ILoggerService>();
        loggerService.Setup(svc => svc.GetLog(??))
Run Code Online (Sandbox Code Playgroud)

但是,如果不让我的测试类实现ILoggable,我无法看到.

提前致谢.

c# unit-testing prism moq moq-3

7
推荐指数
1
解决办法
9688
查看次数

在Xaml中控制WPF动画

我有两个动画定义为我的网格中的闪存单元格值,一个是值增加,一个是值减小.

在调试中运行应用程序时,我在输出窗口中看到了大量的警告:

无法执行操作,因为指定的Storyboard从未应用于此对象以进行交互式控制.行动="停止"; 故事板= 'System.Windows.Media.Animation.Storyboard';

我的动画是通过数据触发器触发的,如下所示: -

在此输入图像描述

故事板如下:

在此输入图像描述

鉴于StopStoryboard似乎是问题所在,即没有需要停止的故事板运行.另外我的理解是在WPF中开始一个新动画将替换已经运行的任何现有动画.但是,如果我从两个DataTriggers中删除StopStoryboard,我会遇到另一个问题.这次只有BidDownStory会触发.我永远不会看到细胞Animate Blue.

另一件有趣的事情有时会发生.如果动画在屏幕外发生(即列不可见)并且我滚动以使列可见,我会按预期看到动画.但是,如果我然后将网格滚动回到列再次关闭屏幕,动画将继续运行,但是对于网格中的不同列!

如果您能提供解决这些问题的任何帮助,我将不胜感激.

谢谢

wpf animation storyboard

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

使用通用类型进行转换

我很确定有一个简单的答案,围绕共同变化,但我很难看到它!

我有一个这样的课:

internal sealed class GenericCallbackClass<T> : SomeBaseClass
    where T : ICallbackMessageBase
{
    public GenericCallbackClass(string activeId, T message)
        : base(activeId)
    {
        Message = message;
    }

    public T Message { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个类的实例,该类实现名为Foo的ICallbackMessageBase,并实例化一个新的GenericCallbackClass,将其作为T的参数传递,例如 var myCallback = new GenericCallback<Foo>("SomeID", new Foo())

我现在想把它转换为GenericCallbackClass的更通用的实例,因为我将有很多这样的实例与Foo,Bar等,但都实现了ICallbackMessageBase.

所以我想做点什么 var callback = myCallback as GenericCallbackClass<ICallbackMessageBase>

看来我不能做这个演员...有什么想法我应该绕过这个吗?

c# generics casting

4
推荐指数
1
解决办法
171
查看次数

ADO.net SqlTransaction提高了性能

我正在做一些涉及将一批记录插入Sql数据库的工作.批量的大小会有所不同,但为了论证,我们可以说每5秒有5000条记录.但可能会少一些.多个进程将写入此表,没有任何内容正在从中读取.

我在快速测试中注意到的是,在整个批量插入中使用SqlTransaction似乎可以提高性能.

例如

SqlTransaction trans = Connection.BeginTransaction()
myStoredProc.Transaction = trans;
sampleData.ForEach(ExecuteNonQueryAgainstDB);
transaction.Commit();
Run Code Online (Sandbox Code Playgroud)

我对能够回滚我的更改不感兴趣所以我不会真正考虑使用事务,除非它似乎提高了性能.如果我删除此事务代码,我的插入从300ms到大约800ms!

这是什么逻辑?因为我的理解是事务仍然将数据写入数据库但锁定记录直到它被提交.我原以为这会有一个开销......

我正在寻找的是这种插入的最快方法.

c# sql-server ado.net

3
推荐指数
2
解决办法
5342
查看次数

ZeroMq Pub子地址不可用

我正在使用zeromq c#implementation创建pub子样式通信.这一切在我的本地机器上工作正常但是当对远程地址运行客户端组件(发布者)时,我得到"地址不可用".据我所知,发布服务器将绑定到端点,订阅服务器将连接.

我是否误解了某些内容或者publisherSocket.Bind("tcp:// someRemoteIP:5001")是否有效?

c# messaging zeromq

3
推荐指数
1
解决办法
1120
查看次数