小编Tom*_*Tom的帖子

Multiple Parallel Task.ContinueWith执行顺序

题

这可能是我错过的简单事情.

让我说我做(在loveley VB中):

Dim t1 As New Task(Sub() Debug.WriteLine("t1"))
Dim t2 As Task = t1.ContinueWith(Sub() Debug.WriteLine("t2"))
Dim t3 As Task = t1.ContinueWith(Sub() Debug.WriteLine("t3"))
t1.Start()
Run Code Online (Sandbox Code Playgroud)

注意t1.ContinueWith使用两次.这些任务的首选执行顺序是什么?对我来说,无论是随机还是错误.

为什么?

我想这样做的原因......

  1. 创建抓取和返回数据的任务
  2. 接下来是一个任务"在TaskScheduler.FromCurrentSynchronizationContext()UI线程上""分类"UI
  3. 通过将数据转换为长报告(需要很长时间)来跟踪原始数据获取任务
  4. 返回UI线程,将该报告分配给预览控件
  5. 清理(​​摆脱我的进度动画等)

由于步骤4是可选的,因此这变得更加复杂.

在所有这些中,我的任务向后弯曲以设置成员属性,因此UI和任务可以很好地发挥作用.也许我应该完全放弃任务结果,只是坚持Synclocking我的成员变量.它们都只是一次性分配.

谢谢,汤姆

.net task-parallel-library

13
推荐指数
2
解决办法
7048
查看次数

如何将WPF资源分配给其他资源标记

这是非常模糊的,我可能只是遗漏了一些非常简单的东西.

场景1

让我说我创建一个渐变画笔,在我的<Window.Resources>部分中这样:

<LinearGradientBrush x:Key="GridRowSelectedBackBrushGradient" StartPoint="0,0" EndPoint="0,1">
    <GradientStop Color="#404040" Offset="0.0" />
    <GradientStop Color="#404040" Offset="0.5" />
    <GradientStop Color="#000000" Offset="0.6" />
    <GradientStop Color="#000000" Offset="1.0" />
</LinearGradientBrush>
Run Code Online (Sandbox Code Playgroud)

然后很久以后,我想覆盖HighlightBrushKey一个DataGrid.我基本上这样做了(太可怕了);

<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                     GradientStops="{Binding Source={StaticResource GridRowSelectedBackBrushGradient}, Path=GradientStops}"
                     StartPoint="{Binding Source={StaticResource GridRowSelectedBackBrushGradient}, Path=StartPoint}"
                     EndPoint="{Binding Source={StaticResource GridRowSelectedBackBrushGradient}, Path=EndPoint}" />
Run Code Online (Sandbox Code Playgroud)

这显然不是引用资源最灵活的方式.我也提出了以下问题,几乎完全相同.

情景2

假设我在我的<Window.Resources>标记中创建了两种颜色,如下所示:

<SolidColorBrush x:Key="DataGridRowBackgroundBrush" Color="#EAF2FB" />
<SolidColorBrush x:Key="DataGridRowBackgroundAltBrush" Color="#FFFFFF" />
Run Code Online (Sandbox Code Playgroud)

然后,我想在一个Array中提供它们,它在Binding上提供ConverterParameter,这样我就可以为我的静态资源实例提供自定义Converter:

<Setter Property="Background">
    <Setter.Value>
        <Binding RelativeSource="{RelativeSource Mode=Self}" 
                 Converter="{StaticResource BackgroundBrushConverter}">
            <Binding.ConverterParameter>
                <x:Array Type="{x:Type Brush}">
                    <SolidColorBrush Color="{Binding Source={StaticResource DataGridRowBackgroundBrush}, Path=Color}" />
                    <SolidColorBrush Color="{Binding Source={StaticResource …
Run Code Online (Sandbox Code Playgroud)

.net wpf resources xaml

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

如何在wpf中绘制带有角角的边框?

你知道,就像太空堡垒纸!我已经给出了一些建议,但现在我很困惑。我还没有走几何路线,所以我将尽我所能解释。

我希望边框要大一些,但要像CornerRadius一样包含固定大小的角。除了圆角,我希望它们是锥形的,例如:

/---------\
|         |
|         |
\_________/
Run Code Online (Sandbox Code Playgroud)

我已经做了两次尝试:

  1. 我的第一次尝试是尝试操纵边界类。这只是行不通,因为拉伸形状会破坏几何形状和比例。
  2. 第二个尝试是开箱即用。从字面上看。我创建了一个3x3的网格,并用4个边框填充,每个边框的厚度分别为2,0,0,0-0,2,0,0-0,0,2,0和0,0,0,2。最后一步是用Line连接边界。这是我的问题所在。

第一次尝试

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <Grid>
      <Grid.Resources>
         <Style x:Key="MyPoly" TargetType="Polygon">
            <Setter Property="Points">
               <Setter.Value>
                  <PointCollection>
                     <Point X="0.10" Y="0.01"/>
                     <Point X="0.50" Y="0.01"/>
                     <Point X="0.60" Y="0.10"/>
                     <Point X="0.60" Y="0.50"/>
                     <Point X="0.50" Y="0.60"/>
                     <Point X="0.10" Y="0.60"/>
                     <Point X="0.01" Y="0.50"/>
                     <Point X="0.01" Y="0.10"/>
                  </PointCollection>
               </Setter.Value>
            </Setter>
         </Style>
      </Grid.Resources>
      <Border
         Width="100"
         Height="100"
         BorderBrush="Black"
         BorderThickness="3"
         CornerRadius="5"/>
      <Grid Width="400"
            Height="300">
         <Polygon
            Stroke="Purple"
            StrokeThickness="2"
            Style="{StaticResource MyPoly}" Stretch="Fill">
            <Polygon.Fill>
               <SolidColorBrush Color="Blue" Opacity="0.4"/>
            </Polygon.Fill>
            <Polygon.LayoutTransform>
               <ScaleTransform ScaleX="1" ScaleY="1"/>
            </Polygon.LayoutTransform>
         </Polygon>
      </Grid> …
Run Code Online (Sandbox Code Playgroud)

wpf graphics border line

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

标签 统计

.net ×2

wpf ×2

border ×1

graphics ×1

line ×1

resources ×1

task-parallel-library ×1

xaml ×1