小编bit*_*onk的帖子

如何在WPF中处理/编辑大量文本?

使用WPF显示和编辑大量未格式化文本(就像notepade一样)的好方法是什么?将大字符串加载到TextBox会使UI无响应.整体性能与以前的Microsoft UI框架的TextBox Controls几乎没有可比性.

我有什么选择来解决这个问题.我不想在文本控件加载文本时阻止UI线程.此外,我可能需要某种"虚拟化",因为将整个文本加载到控件中可能不是一个好主意(我想即使它们不可见,20MB的文本也会创建很多字形).似乎TextBox甚至没有AppenText()方法,所以我甚至没有办法控制文本的异步加载.

这不是一个常见的问题吗?似乎WPF没有提供任何开箱即用的东西.为什么会这样?

wpf performance text

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

本地化基于MVVM的WPF应用程序

什么是一个很好的方法来本地化基于MVVM的WPF显示,可以在运行时更改其语言?当然,我可以在ViewModel中为View中某处显示的每个字符串创建一个字符串属性,但这对我来说似乎相当繁琐.对此有共同的方法/最佳实践吗?

wpf localization mvvm

8
推荐指数
3
解决办法
7353
查看次数

resharper"cleanup code"与'var'关键字

我对Visual Studio 2008 Team Developer Edition中的 c#代码清理有一种奇怪的行为.

每当我使用"Full Cleanup"清理我的代码时,它都会用显式类型声明替换所有变量声明.但是我在"检查严重性","初始化程序显式声明类型时使用var关键字"和"尽可能使用var关键字"设置"显示为错误"下的相应设置

我需要设置其他设置还是已知错误?

c# resharper

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

使用IoC容器进行插件架构

如果我错了,请纠正我,但MEF只适用于管理一组可以自动发现和自动连接的未知事物(插件).对于未来的项目,我们需要一个真正的IoC容器来明确地配置应用程序的已知部分(MEF至极不在好),但另外我们还需要支持插件自动发现(最好没有POCO的属性,如果可能的话).IoC容器可以轻松地/默认支持吗?如果是这样,你可以快速提示如何在Unity和StructureMap中完成这项工作吗?这是我们目前支持的两个.我们真的希望避免依赖IoC容器 MEF.

.net c# mef ioc-container

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

HttpClientFactory TaskCanceledException:无法从传输连接读取数据

我创建了一个简单的控制台应用程序,它使用新的 ASP.NET Core 2.1 HttpClientFactory从 archive.org 下载单个 (PDF) 文件。

对于该程序中使用的特定 URL,我总是得到一个TaskCanceledException. 如果您尝试运行此代码,您可能会遇到相同的异常。不过,它适用于 archive.org 上的其他 URL。当使用 wget 从完全相同的 URL ( wget https://archive.org/download/1952-03_IF/1952-03_IF.pdf --output-document=IF.pdf) 下载文件时,下载成功。

但是,当我这样做时,HttpClient我得到以下异常。

我可能做错了什么?

这是简单的代码:

using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using System.IO;
using System.Diagnostics;

namespace test2
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            var serviceCollection = new ServiceCollection();
            serviceCollection.AddHttpClient("archive", c =>
            {
                c.BaseAddress = new Uri("https://archive.org/download/");
                c.DefaultRequestHeaders.Add("Accept", "application/pdf");
            })
            .AddTypedClient<ArchiveClient>();

            var services …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core asp.net-core-2.1 httpclientfactory

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

使用Visual Studio查找缺少的XML注释内容

在整个或C#源代码中,我们有很多评论错过了实际内容,如下所示:

/// <summary>
/// </summary>
Run Code Online (Sandbox Code Playgroud)

或这个:

/// <summary>
///
/// </summary>
Run Code Online (Sandbox Code Playgroud)

或这个:

/// <param Name="flag"></param>
Run Code Online (Sandbox Code Playgroud)

不幸的是,Visual Studio不会为此类缺失注释生成警告.但是对于我们来说,如果我们可以在视觉工作室内点击列表中的项目(例如,警告列表)然后被带到源代码中的错误位置来纠正它将会很好.此外,在每次构建xml文件时都会看到缺少xml注释内容的列表.你对如何实现这个有任何想法吗?

xml-comments visual-studio

7
推荐指数
2
解决办法
2962
查看次数

使用linq表达式的typesafe NotifyPropertyChanged

表单构建自己的MVVM我有以下代码,让我们有类型安全的NotifyOfPropertyChange调用:

public void NotifyOfPropertyChange<TProperty>(Expression<Func<TProperty>> property)
{
    var lambda = (LambdaExpression)property;
    MemberExpression memberExpression;
    if (lambda.Body is UnaryExpression)
    {
        var unaryExpression = (UnaryExpression)lambda.Body;
        memberExpression = (MemberExpression)unaryExpression.Operand;
    }
    else memberExpression = (MemberExpression)lambda.Body;
    NotifyOfPropertyChange(memberExpression.Member.Name);
 }
Run Code Online (Sandbox Code Playgroud)

这种方法与标准的简单字符串方法相比如何?有时我的属性会以非常高的频率发生变化.我可以安全地使用这种类型安全的方法吗?经过一些初步测试后,似乎确实产生了一些小的差异.这种方法可能导致内存负载多少CPU?

wpf mvvm expression-trees inotifypropertychanged

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

基于.NET的IDE的脚本语言是什么?

我们有一个用于机器自动化的IDE,允许用户通过可视化连接对象和组件来开发解决方案.他们还可以使用C++和C#编写"插件".IDE是使用.NET编写的.它的用户通常不是传统的软件开发和编程,而是更多的是技术/电气和自动化工程师的方向,但他们都需要了解C#和C++编程的基础知识.

如果我们要为IDE本身引入宏/脚本语言,包括交互式控制台(仅限设计时间),我们应该选择哪种语言?它应该是一种动态脚本语言,它在.NET和DLR中具有良好的基础,因为它是未来的证据,并且具有良好的支持和背后的良好动力,但对于我们的特殊开发人员也不会有如此陡峭的学习曲线.理想情况下,如果你了解C++和/或C#,它应该是完全直观的 - 即使你不是一个坚如磐石的软件开发人员.

更新:当前对我们最有吸引力的选项是使用动态编译的C#.我们的用户可以继续使用C#.CSI证明,它甚至可以构建一个交互式控制台.您如何看待这个选项?是否有任何潜在的陷阱/缺点我们(由于我们缺乏一般的脚本编制经验)只是还没有意识到?

.net scripting dynamic-language-runtime design-decisions

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

DataGrid也支持树视图

您是否知道任何支持树视图的类似数据网格的控件.像这样(但仍然完全WPF样式/可模仿):

更新:UI虚拟化将是另一个重要功能.

在此输入图像描述

wpf treeview datagrid

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

禁用捕获所有库代码中的上下文,ConfigureAwait(false)

在使用时await,默认情况下SynchronizationContext捕获(如果存在)并且await使用该上下文执行(继续块)之后的代码块(这导致线程上下文切换).

public async Task DoSomethingAsync()
{
     // We are on a thread that has a SynchronizationContext here.

     await DoSomethingElseAsync();

     // We are back on the same thread as before here 
     //(well sometimes, depending on how the captured SynchronizationContext is implemented)
}
Run Code Online (Sandbox Code Playgroud)

虽然此默认值可能在您希望在异步操作完成后返回UI线程的UI上下文中有意义,但它似乎没有意义作为大多数其他方案的默认值.对于内部库代码来说当然没有意义,因为

  1. 它带来了不必要的线程上下文切换的开销.
  2. 很容易意外地产生死锁(如此此处所述).

在我看来,微软已经决定了错误的默认值.

现在我的问题:

有没有其他(最好是更好的)方法来解决这个问题,而不是混淆await我的代码中的所有调用.ConfigureAwait(false)?这很容易忘记,使代码可读性降低.

更新:await Task.Yield().ConfigureAwait(false);在每个方法的开头 调用是否足够?如果这可以保证我将在一个没有SynchronizationContextaferwards 的线程上,所有后续await调用都不会捕获任何上下文.

.net c# async-await c#-5.0

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