使用WPF显示和编辑大量未格式化文本(就像notepade一样)的好方法是什么?将大字符串加载到TextBox会使UI无响应.整体性能与以前的Microsoft UI框架的TextBox Controls几乎没有可比性.
我有什么选择来解决这个问题.我不想在文本控件加载文本时阻止UI线程.此外,我可能需要某种"虚拟化",因为将整个文本加载到控件中可能不是一个好主意(我想即使它们不可见,20MB的文本也会创建很多字形).似乎TextBox甚至没有AppenText()方法,所以我甚至没有办法控制文本的异步加载.
这不是一个常见的问题吗?似乎WPF没有提供任何开箱即用的东西.为什么会这样?
什么是一个很好的方法来本地化基于MVVM的WPF显示,可以在运行时更改其语言?当然,我可以在ViewModel中为View中某处显示的每个字符串创建一个字符串属性,但这对我来说似乎相当繁琐.对此有共同的方法/最佳实践吗?
我对Visual Studio 2008 Team Developer Edition中的 c#代码清理有一种奇怪的行为.
每当我使用"Full Cleanup"清理我的代码时,它都会用显式类型声明替换所有变量声明.但是我在"检查严重性","初始化程序显式声明类型时使用var关键字"和"尽可能使用var关键字"设置"显示为错误"下的相应设置
我需要设置其他设置还是已知错误?
如果我错了,请纠正我,但MEF只适用于管理一组可以自动发现和自动连接的未知事物(插件).对于未来的项目,我们需要一个真正的IoC容器来明确地配置应用程序的已知部分(MEF至极不在好),但另外我们还需要支持插件自动发现(最好没有POCO的属性,如果可能的话).IoC容器可以轻松地/默认支持吗?如果是这样,你可以快速提示如何在Unity和StructureMap中完成这项工作吗?这是我们目前支持的两个.我们真的希望避免依赖IoC容器和 MEF.
我创建了一个简单的控制台应用程序,它使用新的 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#源代码中,我们有很多评论错过了实际内容,如下所示:
/// <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注释内容的列表.你对如何实现这个有任何想法吗?
表单构建自己的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?
我们有一个用于机器自动化的IDE,允许用户通过可视化连接对象和组件来开发解决方案.他们还可以使用C++和C#编写"插件".IDE是使用.NET编写的.它的用户通常不是传统的软件开发和编程,而是更多的是技术/电气和自动化工程师的方向,但他们都需要了解C#和C++编程的基础知识.
如果我们要为IDE本身引入宏/脚本语言,包括交互式控制台(仅限设计时间),我们应该选择哪种语言?它应该是一种动态脚本语言,它在.NET和DLR中具有良好的基础,因为它是未来的证据,并且具有良好的支持和背后的良好动力,但对于我们的特殊开发人员也不会有如此陡峭的学习曲线.理想情况下,如果你了解C++和/或C#,它应该是完全直观的 - 即使你不是一个坚如磐石的软件开发人员.
更新:当前对我们最有吸引力的选项是使用动态编译的C#.我们的用户可以继续使用C#.CSI证明,它甚至可以构建一个交互式控制台.您如何看待这个选项?是否有任何潜在的陷阱/缺点我们(由于我们缺乏一般的脚本编制经验)只是还没有意识到?
您是否知道任何支持树视图的类似数据网格的控件.像这样(但仍然完全WPF样式/可模仿):
更新:UI虚拟化将是另一个重要功能.

在使用时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上下文中有意义,但它似乎没有意义作为大多数其他方案的默认值.对于内部库代码来说当然没有意义,因为
在我看来,微软已经决定了错误的默认值.
现在我的问题:
有没有其他(最好是更好的)方法来解决这个问题,而不是混淆await我的代码中的所有调用.ConfigureAwait(false)?这很容易忘记,使代码可读性降低.
更新:await Task.Yield().ConfigureAwait(false);在每个方法的开头
调用是否足够?如果这可以保证我将在一个没有SynchronizationContextaferwards 的线程上,所有后续await调用都不会捕获任何上下文.
c# ×4
wpf ×4
.net ×3
mvvm ×2
asp.net-core ×1
async-await ×1
c#-5.0 ×1
datagrid ×1
localization ×1
mef ×1
performance ×1
resharper ×1
scripting ×1
text ×1
treeview ×1
xml-comments ×1