小编mcw*_*yrm的帖子

MultiDataTrigger与具有多重绑定的DataTrigger

我遇到了一个情况,我可以用它来轻松实现相同的功能MultiDataTrigger,或者交替,使用DataTriggerMultiBinding.是否有任何实质性理由偏好一种方法而不是另一种方法?

使用MultiDataTrigger:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding Path=SomePath}" Value="SomeValue"/>
        <Condition Binding="{Binding Path=SomeOtherPath, Converter={StaticResource SomeConverter}}" Value="SomeOtherValue"/>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/>
    </MultiDataTrigger.EnterActions>
</MultiDataTrigger>
Run Code Online (Sandbox Code Playgroud)

使用MultiBinding:

<DataTrigger Value="foo">
    <DataTrigger.Binding>
        <MultiBinding Converter="{StaticResource fooConv}"/>
            <Binding Path=SomePath/>
            <Binding Path=SomeOtherPath/>
        </MultiBinding>
    </DataTrigger.Binding>
    <DataTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/>
    </DataTrigger.EnterActions>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

wpf datatrigger multitrigger multibinding

29
推荐指数
2
解决办法
2万
查看次数

如何等待异步任务

static void Main(string[] args)
{
    Action myAction = async () =>
    {
        await Task.Delay(5);
        Console.WriteLine(Interlocked.Add(ref ExecutionCounter, 1));                
    };

    var actions = new[] { myAction, myAction, myAction };

    Task.WaitAll(actions.Select(a => Execute(a)).ToArray());  //This blocks, right?

    Console.WriteLine("Done waiting on tasks.");
    Console.ReadLine();
}

static int ExecutionCounter = 0;

private static Task Execute(Action a)
{
    return Task.Factory.StartNew(async () =>
    {
        await Task.Delay(5);
        a();
    });
}
Run Code Online (Sandbox Code Playgroud)

这看起来很简单,但输出总是看起来像这样(数字的顺序当然会改变):

完成等待任务.

2

1

3

我在这里错过了什么?为什么Task.WaitAll不像我期待的那样阻止?

c# task

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

标签 统计

c# ×1

datatrigger ×1

multibinding ×1

multitrigger ×1

task ×1

wpf ×1