小编use*_*007的帖子

任务未处理的异常

我试图了解在任务对象中引发但从未处理的异常发生了什么.

在MSDn上,据说:

如果您不等待传播异常的任务或访问其Exception属性,则在对任务进行垃圾回收时,将根据.NET异常策略升级异常.

所以我不太明白这些异常会以何种方式影响程序流程.我认为这些异常应该在垃圾收集后立即中断执行.但我无法设计这种行为.在以下代码段中,抛出的异常不会显示.

// Do something ...
Task.Run (()=> {throw new Exception("Exception in the task!");});
// Do something else
Run Code Online (Sandbox Code Playgroud)

请问,任何人都可以解释如何处理未处理的任务异常,以及它们如何影响程序流程.

c# exception task

14
推荐指数
2
解决办法
5961
查看次数

WPF listview垂直滚动条

我有一个带有gridview的listview控件,因为它是view属性.其中一个专栏用于显示非常长的文本.该列单元格模板设置为TextBlock.每当listview项目源只包含一个项目时,无论提到哪个TextBlock内容开始超过listview高度,垂直滚动都不可用.

<ListView ItemsSource="{Binding Path=ReportEntries}"  VerticalContentAlignment="Top"  ScrollViewer.VerticalScrollBarVisibility="Visible">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="VerticalContentAlignment" Value="Top"/>
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Path}" />
                <GridViewColumn Header="Message" Width="50" DisplayMemberBinding="{Binding Message}" />
                <GridViewColumn Header="Details"  DisplayMemberBinding="{Binding Details}" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock TextWrapping="Wrap" Text="{Binding}"/>
                      </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
  </ListView.View>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 感谢帮助

wpf

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

对象深层克隆实现

我必须实现通用扩展deepclone方法,该方法可以与任何引用类型实例一起使用以获取其深层副本。我实现如下

static class ClassCopy
{
    static public T DeepClone<T> (this T instance)
    {
        if (instance == null) return null;
        var type = instance.GetType();
        T copy;
        var flags = BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.NonPublic |
                    BindingFlags.Instance;

        var fields = type.GetFields(flags);

        // If type is serializable - create instance copy using BinaryFormatter
        if (type.IsSerializable)
        {
            using (var stream = new MemoryStream())
            {
                var formatter = new BinaryFormatter();
                formatter.Serialize(stream, instance);
                stream.Position = 0;
                copy = (T) formatter.Deserialize(stream);
            }

            // Copy all fiels  which …
Run Code Online (Sandbox Code Playgroud)

c# recursion extension-methods deep-copy

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

新vs覆盖关键字

我有一个关于多态方法的问题.我有两个类:带有非虚方法的基类,Foo( )它调用它的虚方法Foo (int i) (如下所示:Foo() {Foo(1);})以及覆盖方法的派生类)Foo(int i).

如果我调用Foo()派生类的实例的方法,则演练如下:base Foo() -> override Foo(int i).但是如果我将覆盖方法更改为新的,则演练如下:base Foo -> base Foo(int i).它甚至没有达到新Foo(int i)方法.请解释这些方法的顺序以及它的原因.

using System;
class Program
{
    sealed void Main()
    {
        DerivedClass d = new DerivedClass();
        //Goes to BaseClass Foo() method
        //then goes to Derived Foo(int i ) method
        d.Foo();
    }
}
class BaseClass
{
    public void Foo() { Foo(1); }
    public virtual void Foo(int i) { // …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism overriding

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