小编Cle*_*eve的帖子

如何让WPF窗口自动调整内容,而不是更多

我有一个包含2个TextBlocks,一个进度条和一个取消按钮的对话框.

这是XAML:

Window x:Class="WpfApplication4.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApplication4"
    mc:Ignorable="d"
    Title="MainWindow" Height="Auto" Width="200">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <TextBlock x:Name="txtFirst" Grid.Row="0"  Margin="5" TextWrapping="Wrap">This is a really really really really long string that wraps</TextBlock>
    <TextBlock x:Name="txtSecond" Grid.Row="1"  Margin="5" Text="A Shorter string" TextWrapping="Wrap" MaxWidth="200"/>
    <ProgressBar x:Name="prgProgress" Grid.Row="2" Margin="5" Height="20" />
    <Button x:Name="btnCancel" Grid.Row="3" Margin="5" Height="25" Width="50"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

我希望Window不要有一个固定的高度,但是根据它的孩子的大小自动调整它的高度而不是更多,但是看不到这样做的方法.在我没有为Window的高度指定任何东西的那一刻,它似乎采用了一个比内容更大的高度不确定原因,或者它从哪里获得高度值?如果我设置Windows高度="自动",我会得到相同的东西.RowDefinitions的所有高度都设置为"Auto",我的意思是"将行高设置为行子高度".

非常感谢您的帮助.

c# wpf layout xaml wpf-controls

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

&lt;ImportWindowsDesktopTargets&gt; 在 try-convert 生成的 *.csproj 中做什么?

我已使用该 try-convert工具将我的项目从 .NET Framework 转换为 .NET 5.0

在检查目标项目的转换后的 *.csproj 文件时,.net50-windows我注意到了以下元素:

<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>

我很好奇它的作用是什么?

这是必要的还是另一个放入try-convert*.csproj 但实际上不再需要出现在 *.csproj 中的示例?

谢谢。

c# csproj .net-5

10
推荐指数
2
解决办法
3676
查看次数

如何将任务结果传递给不使用延续的其他任务

我在Func<Task>类型中定义了可变数量的任务,因此我可以定义任务但不能让它们自动启动。比如说:

Func<Task> task1Func = () => DoTask1Async();
Run Code Online (Sandbox Code Playgroud)

以这种方式定义的一些任务返回值。我需要一种方法将此类任务的结果“传递”给以相同方式定义的后续任务的参数。所以,我想写:

Func<Task> task2Func = () => DoTask2Async(task1Func.Invoke().Result));
Run Code Online (Sandbox Code Playgroud)

这样做的问题是它task1Func.Invoke()再次启动 task1 任务,这是不好的。

我无法将输入重新定义为链式延续,例如:

Func<Task> funcTasks = () => DoTask1Async().ContinueWith(t => DoTask2Async(t.Result));
Run Code Online (Sandbox Code Playgroud)

因为我需要在代码中知道链中每个任务(即 DoTask1Async / DoTask2Async)完成以运行其他代码的点。另一个问题是我不知道如何计算“链”中涉及多少任务。

我无法在任务完成时存储任务结果,因为需要像task1Func和那样以声明方式定义任务task2Func

任务按定义的顺序处理,每个任务在处理下一个任务之前完成。任务的结果仅用于后续任务。

编辑

为了响应使用task1Func.Invoke().Result这里的可运行代码的请求。创建一个新的 WPF 项目并向默认网格添加一个按钮。然后清除 MainWindow.xaml.cs 文件并粘贴以下内容。这是最接近我真实项目的代码,同时删除了所有与问题无关的东西。

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApplication2
{

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    } …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task task-parallel-library async-await

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

如何将一组节点划分为子集,每个子​​集形成有向无环图

在 C# 项目中,我需要执行一组测试。每个测试都有自己所依赖的测试集合。需要测试网络来形成有向无环图(DAG)。

\n\n

使用符号 A -> B -> C,其中 A、B、C 代表测试,然后

\n\n

C 依赖于 B,\nB 依赖于 A。

\n\n

我已经有了一个对测试进行排序的算法,以便我可以按顺序处理它们,从而尊重所有依赖项。也就是说,顺序意味着每个 test\xe2\x80\x99s 依赖项在整个图的测试本身被评估之前被评估。

\n\n

我想要的是一种算法,它首先进行一组测试,然后可以将它们划分为单独的 DAG 图(如果存在)。每个 DAG don\xe2\x80\x99t 中的测试需要排序,因为可以单独完成。这样做的原因是我可以将每个独立的 DAG 作为单独的任务运行,并通过这种方式获得一些效率。

\n\n

因此,考虑一组测试 A、B、C、D、E、F,其依赖关系为:

\n\n
A -> B -> C\n\nD -> C\n\nE -> F\n
Run Code Online (Sandbox Code Playgroud)\n\n

根据算法,我想要 2 组测试,

\n\n
Set 1) A,B,C,D\n\nSet 2) E,F\n
Run Code Online (Sandbox Code Playgroud)\n\n

更新:C# 代码帮助向 Eric 提出请求。

\n\n
    public class Graph\n{\n    private List<Node> _nodes = new List<Node>();\n\n    public IReadOnlyList<Node> Nodes => _nodes;\n\n    public void AddNode(Node node)\n    {\n        _nodes.Add(node);\n …
Run Code Online (Sandbox Code Playgroud)

c# graph-theory directed-acyclic-graphs

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

如何延迟"热"任务,以便按设定顺序处理它们

说我有一组任务:

        var task1 = DoThisAsync(...);
        var task2 = DoThatAsync(...);
        var task3 = DoOtherAsync(...);
        var taskN...
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来按顺序处理一组任务(由包含集合中的位置确定),但让任务只在轮到他们而不是之前运行/启动 - 并且所有这些都包含在其中自己的任务.

问题限制/细节是:

  1. 这些任务需要按特定顺序执行ietask1,task2,...
  2. 上一个任务必须在下一个任务开始之前异步完成
  3. 任务数量是可变的
  4. 每次运行代码时,都可以指定一组不同的任务
  5. 任务的顺序和数量是事先已知的.

主要问题是,只要我调用相关方法(如DoThis()...)返回每个任务,该任务就已经"热"或正在运行,违反了上面的(2).

我曾尝试使用.ContinueWith(..),但是如果我调用上面的每个任务来设置延续或将它们添加到列表或集合中,那么它们已经开始了.

不确定Lazy <T>是否有帮助但目前看不清楚怎么样?

希望这是有道理的,因为我对async/await/tasks很新.

提前谢谢了.

c# asynchronous task task-parallel-library async-await

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

如何使用实体框架从SQL Server实例获取数据库名称列表?

我想使用实体框架(EF)查询SQL Server实例并返回该实例上的数据库名称列表。

我可以使用以下代码执行此操作,但想知道EF是否有办法?

   public static string[] GetDatabaseNames(SqlConnection masterConn)
    {
        List<string> databases = new List<string>();

        //  retrieve the name of all the databases from the sysdatabases table
        using (SqlCommand cmd = new SqlCommand("SELECT [name] FROM sysdatabases", masterConn))
        {
            using (SqlDataReader rdr = cmd.ExecuteReader())
            {
                while (rdr.Read())
                {
                    databases.Add((string)rdr["name"]);
                }
            }
        }

        return databases.ToArray();
    }
Run Code Online (Sandbox Code Playgroud)

我应该提到,我是EF及其功能/局限性的新手。

c# sql-server entity-framework

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

Autofac:有关 OnActivating 和 OnActivated 的问题

我刚刚开始研究使用 Autofac,并遇到了 Lifetime eventsOnActivatingOnActivated.

现在,我已阅读 Autofac 文档HERE

但它引发了一些关于两者之间的区别及其用途的问题。

令人困惑的点是:

  1. 上面的文档说OnActivated“一旦组件完全构建”就会引发。因此,对我来说,这意味着该OnActivating组件尚未完全构建,否则为什么要为这个事件而费心提及它呢。如果这是可信的,那么如果实例尚未准备好,您为什么可以更改属性并调用实例上的方法(通过 IActivatingEventArgs.Instance 属性)?

  2. 文档说它OnActivating是“在使用组件之前引发的”。“使用”是否意味着在任何 Resolve 方法将组件传递给客户端代码之前?

  3. OnActivated事件是否也在组件被“使用”之前引发?文档对此没有任何说明,但选择在OnActivating活动中提及它。

有人会更好地说明何时使用每个事件吗?

c# inversion-of-control autofac

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