小编bit*_*onk的帖子

对于异步方法/ Func,无法识别FluentAssertions ShouldNotThrow

我试图检查异步方法抛出具体异常.

为此我使用的是MSTEST和FluentAssertions 2.0.1.

我已经检查了Codeplex上的这个讨论,并看看它如何与异步异常方法一起工作,这是另一个关于FluentAssertions异步测试的链接:

尝试使用我的'生产'代码一段时间之后,我已经关闭了Fluentassertions假的aync类,我的结果代码是这样的(将此代码放在[TestClass]:

[TestMethod]
public void TestThrowFromAsyncMethod()
{
    var asyncObject = new AsyncClass();
    Action action = () =>
    {
        Func<Task> asyncFunction = async () =>
        {
            await asyncObject.ThrowAsync<ArgumentException>();
        };
        asyncFunction.ShouldNotThrow();
    };
}


internal class AsyncClass
{
    public async Task ThrowAsync<TException>()
        where TException : Exception, new()
    {
        await Task.Factory.StartNew(() =>
        {
            throw new TException();
        });
    }

    public async Task SucceedAsync()
    {
        await Task.FromResult(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是ShouldNotThrow无效:

代码无法识别ShouldNotThrow方法.如果我尝试编译,它会给我这个错误:'System.Func'不包含'ShouldNotThrow'的定义和最好的扩展方法重载'FluentAssertions.AssertionExtensions.ShouldNotThrow(System.Action,string,params object []) …

c# async-await fluent-assertions

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

有趣的OutOfMemoryException与StringBuilder

我需要在循环中连续构建大字符串并将它们保存到数据库中,目前偶尔会产生一个OutOfMemoryException.

这里基本上是基于一些数据使用XmlWriterwith 创建一个字符串StringBuilder.然后我从外部库调用一个方法,将该xml字符串转换为其他字符串.之后,转换后的字符串将保存到数据库中.对于不同的数据,这整个过程在一个循环中重复完成大约100次.

字符串本身不是太大(每个低于500kByte),并且在此循环期间进程内存不会增加.但是,偶尔我会得到一个OutOfMemeoryExcpetion内部StringBuilder.Append.有趣的是,此异常不会导致崩溃.我可以捕获该异常并继续循环.

这里发生了什么?为什么我会得到一个OutOfMemoryException尽管系统中仍有足够的可用内存?这是一些GC堆问题吗?

鉴于我无法绕过转换所有这些字符串,我能做些什么来使这项工作可靠?我应该强制GC收集吗?应该Thread.Sleep进入循环?我应该停止使用StringBuilder吗?应该只是在面对时重试OutOfMemoryException

c# memory stringbuilder garbage-collection

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

通过Web浏览器访问GPU

我今天早些时候(在TechCrunch.com上)遇到了这个概念证明,并且对于他们如何设法完成最终结果感到震惊和好奇.他们表示他们不使用webGL或任何插件,但他们能够直接与GPU交互并使用Javascript以高达60 fps的速度呈现3D视觉效果.任何想法如何做到这一点,或如何在不使用插件的情况下从Javascript访问GPU?

网站地址是:famo.us

ps:尝试使用箭头键将方向移向远方!

javascript 3d gpu gpu-programming famo.us

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

在DataTemplate中排序绑定的ItemsControl(仅限XAML)

是否有一种XAML方法可以根据项目的某个属性自动对绑定项目(ViewModel对象列表)ItemsControl进行排序.ItemsControl是DataTemplate的一部分.我认为CollectionViewSource可以解决这个问题,但是如何将CollectionViewSource绑定到ItemsControl.以下代码没有任何表现:

<--xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"-->
    <DataTemplate DataType="{x:Type vm:Company}">
        <DataTemplate.Resources>
            <CollectionViewSource x:Key="viewSource" Source="{Binding Employees}">
                <CollectionViewSource.SortDescriptions>
                        <scm:SortDescription PropertyName="ID" />
                    </CollectionViewSource.SortDescriptions>
            </CollectionViewSource>
        </DataTemplate.Resources>
        <Viewbox>
            <ItemsControl ItemsSource="{Binding Source={StaticResource viewSource}}">
                 <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal"/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </Viewbox>
    </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

sorting wpf datatemplate itemscontrol collectionviewsource

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

删除故事板但保持动画值?

如何在XAML中删除故事板(即DataTrigger中的RemoveStoryboard操作),但保留动画的值.与Animatable.BeginAnimation类似:

如果动画的BeginTime为null,则将删除任何当前动画,并保留属性的当前值.

wpf animation datatrigger storyboard

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

在WPF中实现multidock窗口系统(如blend,visual studio)

您将如何实现如Expression Blend中所示的对接工具箱窗口系统,您可以通过多种方式将工具箱窗口对接在一起,重叠为标签或浮动顶层窗口.我的系统应该与Expression Blend中的行为非常相似.此外,我得到视觉提示的方式,拖动时工具箱窗口将停靠,这正是我需要的.

只有一个例外:在混合时,当拖动到已经顶层(撕下)的工具箱窗口时,我只能将其作为填充整个窗口的选项卡停靠.但是我需要一个工具箱窗口和主窗口之间没有区别的系统.我需要能够将窗口停靠在工具箱窗口中,就像在主窗口中一样.

另请注意,由于内部策略,我无法使用任何开源或第三方库.

我会对你如何为这样的东西设置一般类设计感兴趣?我希望保持尽可能通用,以便它可以用于许多不同的场景.

停靠行为如下图所示.中心图像显示了感应拖曳对接区域.窗口会突然出现的外部图像:

alt text http://img196.imageshack.us/img196/2450/dockingregions.png

一般来说,我在这里遇到市长问题:我如何设计编程模型(如何在XAML中持久化对接配置)以及如何实际实现底层功能.我的第一个想法是,我想成为DockPanel和TabControl的共生.有点像这样:

<DockTabControl>
  <DockTabItem Dock="FirstLeft">
    <DockTabItem.Header>
        <TextBlock>Tab 1</TextBlock>
    </DockTabItem.Header>
    <!-- Tab 1 content -->
  </DockTabItem>
  <DockTabItem Header="Tab 2" Dock="SecondLeft" DockMode="MergeWithPreviousToTabgroup">
    <!-- Tab 2 content -->
  </DockTabItem>
  <DockTabItem Header="Tab 3" Dock="FirstMiddle">
    <!-- Tab 3 content -->
  </DockTabItem>
</DockTabControl>
Run Code Online (Sandbox Code Playgroud)

当然这还没有意义.无法以这种方式定义停靠,并且此处尚未解决窗口问题.但我喜欢仅通过在DockTabItem上定义一些属性来定义对接和tabgroups的想法.我真的不想引入像TabGroups或类似的额外控件.我只是通过定义子节点和Dock附加属性的顺序来了解DockPanel中的对接行为.当然,我的对接会更复杂,行为更像网格.

windows wpf docking

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

如何在WPF中生成和打印大型XPS文档?

我想从我的WPF应用程序生成(然后打印或保存)大型XPS文档(> 400页).我们有一些需要写入XPS的大量内存数据.

如果没有得到一个OutOfMemoryException怎么办呢?有没有办法可以把文件写成块?这通常是怎么做的?我不应该首先将XPS用于大文件吗?

这个根本原因OutOfMemoryException似乎是巨大的创造FlowDocument.我正在创建完整FlowDocument,然后将其发送到XPS文档编写器.这是错误的方法吗?

memory printing wpf xps

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

托管堆碎片

我试图了解堆碎片是如何工作的.以下输出告诉我什么?

这堆是否过于分散?

我有243010个"自由对象",总共53304764个字节.堆中的那些"自由对象"空间是否曾经包含对象但是现在是否收集了garabage?

如何强制碎片堆清理?

!dumpheap -type Free -stat
total 243233 objects
Statistics:
      MT    Count    TotalSize Class Name
0017d8b0   243010     53304764      Free
Run Code Online (Sandbox Code Playgroud)

debugging clr memory-leaks heap-fragmentation

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

在Visual Studio 2012中调试XAML数据绑定

在Silverlight 5 beta中,我可以直接在XAML中调试数据绑定.Visual Studio 2012(RC)中的此功能在哪里?我可以使用WPF,WinRT和/或Silverlight吗?如果是这样的话?当我在绑定表达式应用程序上设置断点时,我得到的消息是不会命中断点,因为没有源代码与此行相关联.

更新:

它适用于Silverlight 5应用程序的Visual Studio 2012(RC),但不适用于WPF应用程序.请不要告诉我,WPF不存在此功能!

data-binding debugging xaml visual-studio-2012

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

强制重新下载nuget包

这是我的情景:

在解决方案A中的项目A中开发nuget包A期间,我们经常需要在另一个项目中对其进行测试.出于这个原因,我们有一个dev nuget feed包含未发布的包A.当构建解决方案A时,它将自动推送到该dev feed.

为了进行测试,我们有一个包含多个项目的解决方案B,所有项目都从该dev nuget feed引用包A.

每当我们重建解决方案A(并且包a被推送到feed)时,我们希望在测试期间在解决方案B的所有项目中使用包的新版本.

一旦包A实际上被释放,它将被推送到发布nuget feed,然后解决方案B应该从发布feed而不是dev feed中提取包.

这些是我的两个问题:

强制将包A重新下载到解决方案B的packages文件夹中的正确方法是什么,并使所有项目都使用包的新版本,即使的版本没有更改

这个(常见的)场景的建议工作流程是什么?我应该采用不同的方式吗?

c# nuget nuget-package

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