小编Ton*_*ony的帖子

T4模板 - 避免包含文件中的空行

我在单独的文件中拆分T4代码以实现模块化和重用,但我发现每个文件在输出中都是空行.例如:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".ttinclude" #>
<#@ Import Namespace="System.Collections.Generic" #>
<#@ Include file="Includes.tt" #>
namespace <#= NameSpace #>
{
Run Code Online (Sandbox Code Playgroud)

如果Includes.tt列出了3个其他*.tt文件,我在命名空间前得到3个空行.当我添加代码并将其拆分为单独的*.tt文件时,这个空白空间不断增长.事实上,我将所有包含文件打包到一个Includes.tt中,希望这只花费我一行空.它没有.我仍然在Includes.tt中列出的每个文件中得到一个空行.有没有办法避免这种情况?

编辑:假设我不是一个愚蠢的错误(我真诚地希望我是),问题并不像第一眼看上去那么微不足道:

a)通过包含的T4文件重用和模块化与T4本身一样古老,并在最新的MSDN杂志文章中提到:"在T4代码生成解决方案中管理复杂性".

b)如果代码是自动生成的,那并不意味着它的格式错误或清晰度差.

c)使用当前的解决方案,在我的情况下,对于每个生成的.cs文件,读者必须滚动一个空页面,直到她开始看到一些生成的文本.所有这些都是因为我在多个包含的.tt文件之间分割了我的代码.这似乎不对.

t4

19
推荐指数
5
解决办法
6318
查看次数

使用ASP.NET WebApi中的HttpClient异步读取分块内容

我想使用HttpClient异步读取chunked(在HTTP 1.1 chunked传输编码意义上)内容.

我正在寻找HttpContent异步方法: MSDN链接

但是,在返回Task for byte数组的情况下,例如:

在将所有内容写入字节数组后,返回的Task对象将完成

我正在准确地获取分块内容,因为服务器不知道所有数据何时可用,因此我不知道所有内容何时到达.我希望能够在他们到达时阅读这些块,而不是等待,可能需要几个小时才能完成任务.

我可以以某种方式阅读部分响应内容,比如在响应中收到每4K字节内容时会完成一些任务吗?

在这种情况下,使用HttpClient是否有利?

rest asynchronous http asp.net-web-api

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

删除WPF ListView/GridView高亮显示chrome

我有WPF ListView与GridView视图,我想删除行高亮的任何痕迹.

这段有用的代码可以在本网站的一个答案中找到:

     <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
           <Setter Property="Control.Focusable" Value="False"/>
           <Style.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                 <Setter Property="Background" Value="{x:Null}" />
                 <Setter Property="BorderBrush" Value="{x:Null}" />
              </Trigger>
           </Style.Triggers>
        </Style>
     </ListView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

但是,虽然此更改有助于删除大部分突出显示,但它不会删除鼠标在ListView行上移动时仍出现的水平条.我该如何删除它?

我已经处理了涉及Button的类似问题,并找到了一个解决方案,通过删除其chrome来更改Button模板.

在ListView/GridView的这种情况下,我无法找到要更改的相应chrome和模板.

wpf listview highlight wpf-controls

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

从DLL导出所有内容是否会影响性能

要进行单元测试,我必须导出许多小型内部类,这些类从未被我的DLL客户端使用.

我知道每个导出的函数都会在可执行映像中生成存根,并且如果DLL未在其首选位置加载,则Windows加载程序必须对这些存根执行修复.

有人建议将DLL构建为静态库,仅用于单元测试.

我想知道这是否值得麻烦?我没有找到任何关于从DLL导出每个类的问题有多重要的参考,或者如果我对它有选择性,那么在加载器性能和内存消耗方面是否有任何显着的增益.

我想我在某处读到GCC编译器默认导出所有内容.

编辑:由于该问题的陈述动机是有争议的,让我重新说一下:我是否应该浏览我的DLL并删除所有未向其客户端公开的类的DLLEXPORT?假设我正在使用一堆遗留的DLL,我注意到它们有很多不必要的导出.这会提高装载速度吗?特别是在Windows 7和8上使用MSVC版本9+.

windows dll performance

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

为什么在对象上调用终结器

这是一个展示令人惊讶的终结行为的示例程序:

class Something
{
    public void DoSomething()
    {
        Console.WriteLine("Doing something");
    }
    ~Something()
    {
        Console.WriteLine("Called finalizer");
    }
}

namespace TestGC
{
    class Program
    {
        static void Main(string[] args)
        {
           var s = new Something();
           s.DoSomething();
           GC.Collect();
           //GC.WaitForPendingFinalizers();
           s.DoSomething();
           Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我运行该程序,打印的是:

Doing something
Doing something
Called finalizer
Run Code Online (Sandbox Code Playgroud)

这似乎符合预期.因为在调用之后有一个对s的引用GC.Collect(),s不是垃圾.

现在从行//GC.WaitForPendingFinalizers(); 构建中删除注释 并再次运行该程序.

我希望输出中没有任何改变.这是因为我读到如果发现对象是垃圾并且它有终结器,它将被放在终结器队列中.由于对象不是垃圾,因此它不应该放在终结器队列上似乎是合乎逻辑的.因此,注释掉的那条线应该什么都不做.

但是,该计划的输出是:

Doing something
Called finalizer
Doing something
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解为什么终结器会被调用吗?

c# garbage-collection finalizer

3
推荐指数
2
解决办法
318
查看次数

如何在MVVM ViewModel中获取Rx Observable事件流

我刚读Rx HOL NET.找到后(示例使用Windows窗体):

var moves = Observable.FromEvent<MouseEventArgs>(frm, "MouseMove");
Run Code Online (Sandbox Code Playgroud)

我想知道如何在一些WPF MVVM设置中实例化并传递对ViewModel的引用?根据我的理解,尝试在ViewModel中过滤此数据流是有意义的.

或者,如何为键盘输入TextBox做类似的事情?例如,在这种情况下,您不会将某些文本屏蔽行为附加到XAML中的控件,而是让VM中的Observer过滤并验证键盘输入.

我完全不在赛道上吗?

mvvm system.reactive observable

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