小编bit*_*onk的帖子

WPF数据绑定是否会更改UI线程?

我刚刚注意到,当我ViewModel从后台工作线程更改我的(MVVM)中的绑定属性时,我没有得到任何异常,并且视图已正确更新.这是否意味着我可以安全地依赖于wpf数据绑定编组ViewModelUI线程中的所有更改?我想我已经读过一个应该确保(在ViewModel)INotifyPropertyChanged.PropertyChanged线程上触发的内容.这有什么改变在3.5或什么?

data-binding wpf multithreading mvvm

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

WPF在现实生活中与XNA的融合程度如何?

我知道有几种方法可以在同一个应用程序中混合使用XNA和WPF.我发现在我的XNA游戏中将WPF用于所有GUI和HUD的东西很诱人.有没有人对这种方法在现实生活中如何使用.NET 3.5 SP1有任何实际经验?任何陷阱(例如"空域问题")?什么样的appoach最好的暗示?

wpf xna interop direct3d

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

当绑定到CollectionViewSource时,DesignTime数据不会显示在Blend中

我有一个viewmodel的datatemplate,其中itemscontrol绑定到CollectionViewSource(以启用xaml中的排序).

<DataTemplate x:Key="equipmentDataTemplate">
    <Viewbox>
        <Viewbox.Resources>
            <CollectionViewSource x:Key="viewSource" Source="{Binding Modules}">
                <CollectionViewSource.SortDescriptions>
                    <scm:SortDescription PropertyName="ID" Direction="Ascending"/>
                </CollectionViewSource.SortDescriptions>
            </CollectionViewSource>
        </Viewbox.Resources>
        <ItemsControl ItemsSource="{Binding Source={StaticResource viewSource}}" 
                      Height="{DynamicResource equipmentHeight}" 
                      ItemTemplate="{StaticResource moduleDataTemplate}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </Viewbox>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我还设置了UserControl,其中所有这些都被定义为提供设计时数据

d:DataContext="{x:Static vm:DesignTimeHelper.Equipment}">
Run Code Online (Sandbox Code Playgroud)

这基本上是一个静态属性,它给我一个EquipmentViewModel,它有一个ModuleViewModel(Equipment.Modules)列表.现在,只要我绑定到CollectionViewSource,设计时数据就不会出现在混合3中.当我直接绑定到ViewModel集合时

<ItemsControl ItemsSource="{Binding Modules}"
Run Code Online (Sandbox Code Playgroud)

我可以看到设计时数据.知道我能做什么吗?

wpf blend collectionviewsource

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

备份和恢复所有resharper设置

如何备份和以后恢复(在全新安装后)所有resharper设置?

resharper backup settings

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

如何找到适合我项目的开源许可证?

我即将主持我的第一个开源项目.我将在codeplex上托管它,我可以在以下许可证中进行选择:

Apache License 2.0,通用开发和分发许可证(CDDL),Eclipse公共许可证(EPL),GNU通用公共许可证(GPL)v2,GNU库通用公共许可证(LGPL),Microsoft公共许可证(Ms-PL),Microsoft Reciprocal License (Ms-RL),Mozilla Public License 1.1(MPL),新BSD许可证和MIT许可证

现在我对所有这些许可都是全新的.不仅我不知道我应该选择什么牌照,而且我也不知道我应该授予和否认什么样的权利.任何有关寻找许可证的过程的帮助都表示赞赏.需要考虑什么样的事情?我应该问自己什么问题?

另外:当我将代码置于任何许可证下时,我是否放弃了任何权利?我是否还需要遵守所选的许可证?

licensing open-source

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

在对象图上创建校验和

这个问题关系到这一个,但我认为应该分开询问.

我有一个复杂的对象实例图.现在,我想在内存中直接创建一个校验和,以检测自上次校验和与对象图一起保存以来是否对其进行了更改.校验和计算应该很快,不应该消耗太多内存.

据我所知,现在最好的解决方案可能是在对象图的二进制序列化形式上生成加密密钥(如果我错了,请纠正我).但这有几个问题:

  1. 我该如何序列化对象?它必须快速且不会消耗太多内存.此外,它必须始终以相同的方式可靠地序列化.如果我使用.NET默认序列化,我真的可以确定如果实际数据相同,创建的二进制流总是相同的吗?我对此表示怀疑.
  2. 那么序列化的另一种方法是什么呢?

更新:

您如何看待这种方法:

  1. 浏览图形并使用算法在图中创建标准的int哈希码 (但不包括表示图中节点的引用类型成员).将每个哈希码添加到整数列表
  2. 将整数列表转换为字节数组
  3. 使用MD5,CRC或类似方法在字节数组上创建哈希

提到的GetHashCode算法应该快速计算一个哈希码,该哈希码对于仅考虑其原始成员的单个对象来说是非常安全的.基于此,字节数组也应该是对象图的相当碰撞安全表示以及此处的MD5/CRC散列.

.net serialization checksum

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

适用于NLog的体面日志查看器

当我满足以下要求时,什么是最适合NLog的查看器:

  • 我需要离线查看日志(文件)和在线(实时)
  • 对于离线我需要能够选择和查看多个文件然后全部显示在一个视图中,其中所有条目按时间顺序序列化
  • 对于在线我需要能够一次查看多个日志源(即应用程序)
  • 对于在线我需要通过本地网络(TCP,UDP,Chainsaw可能?)和通过互联网(http,Webservice?)获取数据
  • 查看器应具有"良好"过滤和视图配置支持(例如,基于regexp/grep的突出显示和装配,loglevel过滤,突出显示,列表或所有可用记录器的树)
  • 查看器应该能够处理大量数据
  • 查看器最好是xcopy可部署的(独立的二进制文件,可以是基于.NET而不是java)
  • 许可证最好允许我在没有额外费用的情况下部署,或者至少这些额外费用应该是"合理的"(所有免费当然是最好的)

作为最后的手段,如果没有一个可以同时进行离线和在线观看,也可以使用单独的配置使用单独的查看器.

如果我错了,请纠正我,但由于NLog似乎有很多方法可以吐出log4j/log4net可编辑日志,我想log4j/log4net查看器也可以做到这一点.

.net log4net log4j nlog viewer

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

将动画和触发器定义为可重用资源?

有没有办法在xaml中某处定义动画(例如作为资源),然后多次重复使用?我在不同的数据模板上有很多独立的画笔,它们独立地需要基于数据触发器来启动相同类型的动画.现在,因为动画似乎必须定义Storyboard.TargetName和Storyboard.TargetProperty.这几乎违背了可重用性的目的.我想以某种方式宣称"使用此动画形成资源,但这次将其应用于另一个元素".

对我来说,这似乎是一个相当基本,重要和必要的要求,我很惊讶它不是那么直截了当地表达的.我在这里错过了什么吗?

同样的事情适用于触发器.假设我有许多不同的视觉元素,它们都使用颜色动画表示相同类型的状态.例如,当"活动"在"错误"等时淡入"红色"时淡入绿色.视觉效果之间的唯一区别是它们的形状/视觉树所需的动画行为是相同的,它们在视觉树中的某处都有一个元素具有颜色类型的属性.我认为不难想象一遍又一遍地重新定义相同的动画和数据触发器是多么乏味.每个开发人员都讨厌这个.我拼命寻求一种更简单的解决方案,不需要(或至少很少)c#代码.

到目前为止我得出的是:

在资源中定义动画像这样(对于所有基本状态重复此操作,如激活,激活,非活动,错误):

<ColorAnimationUsingKeyFrames x:Key="deactivatingColorAnimation" 
                    Storyboard.TargetProperty="Material.(MaterialGroup.Children)[0].Brush.(SolidColorBrush.Color)"                    
                    FillBehavior="HoldEnd" RepeatBehavior="Forever" AutoReverse="True">
      <ColorAnimationUsingKeyFrames.KeyFrames>
        <LinearColorKeyFrame KeyTime="00:00:00" Value="Gray"/>
        <LinearColorKeyFrame KeyTime="00:00:0.25" Value="Gray"/>
        <LinearColorKeyFrame KeyTime="00:00:0.5" Value="Gray" />
        <LinearColorKeyFrame KeyTime="00:00:0.75" Value="Gray" />
     </ColorAnimationUsingKeyFrames.KeyFrames>
</ColorAnimationUsingKeyFrames>
Run Code Online (Sandbox Code Playgroud)

在触发器的故事板中使用它(对于每个状态X重复这个数十亿次的每个不同的状态,总是为故事板创建一个新名称):

<DataTrigger Binding="{Binding SubstrateHolder.State}" Value="Deactivating">
        <DataTrigger.EnterActions>
            <BeginStoryboard x:Name="someStateVisualDeactivatingStoryboard">
                <Storyboard Storyboard.TargetName="someStateVisual">
                    <StaticResource ResourceKey="deactivatingColorAnimation" />
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.EnterActions>
        <DataTrigger.ExitActions>
            <RemoveStoryboard BeginStoryboardName="someStateVisualDeactivatingStoryboard" />
        </DataTrigger.ExitActions>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

您可以很容易地想象我必须为所有那些数以万计的DataTriggers重复复制和粘贴多少臃肿的XAML.

定义所有这些触发器并将其应用于不同的状态视觉效果会很酷.在WPF中如何解决这样的问题?有提示吗?

wpf resources animation datatrigger reusability

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

奇手柄泄漏

我的应用程序(基本应用程序是MFC与C++/CLI互操作,但它也包含很多C#,Windows窗体,WPF)有一个句柄泄漏.在应用程序启动后不久,我可以看到任务管理器中的句柄计数不断增长(以每秒10个新句柄的速率).所以我使用handles.exe来查看它们是什么类型的句柄.我发现泄漏的手柄是工艺手柄.它们是我的应用程序流程的流程句柄.

所以我想知道什么操作通常会创建它运行的进程的句柄.任何想法?你见过这样的东西吗?考虑到我不能使用调试DLL并且我只能使用可以部署xcopy的工具,我还能做些什么来追踪泄漏.

更新:

我能够向它发出windbg!handle,!htrace,并发现进程句柄都是使用以下堆栈跟踪创建的(按频率排序):

0x79f7570b: mscorwks!CorExitProcess+0x00022055
0x79f03edd: mscorwks!GetPrivateContextsPerfCounters+0x0000b6fe
0x79f04b87: mscorwks!GetPrivateContextsPerfCounters+0x0000c3a8
0x79f04b03: mscorwks!GetPrivateContextsPerfCounters+0x0000c324
0x79f919bf: mscorwks!CorExitProcess+0x0003e309
0x79f91b28: mscorwks!CorExitProcess+0x0003e472
0x792d6b4c: mscorlib_ni+0x00216b4c
0x1391a663: +0x1391a663
0x1391a0b1: +0x1391a0b1
0x7a9ea544: System_ni+0x005aa544
0x792a842f: mscorlib_ni+0x001e842f
Run Code Online (Sandbox Code Playgroud)

要么

0x7c8106f5: kernel32!CreateThread+0x0000001e
0x79f04bb2: mscorwks!GetPrivateContextsPerfCounters+0x0000c3d3
0x79f04b03: mscorwks!GetPrivateContextsPerfCounters+0x0000c324
0x79f919bf: mscorwks!CorExitProcess+0x0003e309
0x79f91b28: mscorwks!CorExitProcess+0x0003e472
0x792d6b4c: mscorlib_ni+0x00216b4c
0x1391a663: +0x1391a663
0x1391a0b1: +0x1391a0b1
0x7a9ea544: System_ni+0x005aa544
0x792a842f: mscorlib_ni+0x001e842f
Run Code Online (Sandbox Code Playgroud)

要么

0x08ec2eba: +0x08ec2eba
0x792b8277: mscorlib_ni+0x001f8277
0x792b8190: mscorlib_ni+0x001f8190
0x792b8040: mscorlib_ni+0x001f8040
0x792b7ff2: mscorlib_ni+0x001f7ff2
0x677e48f3: System_Runtime_Remoting_ni+0x000748f3
0x677e44be: System_Runtime_Remoting_ni+0x000744be
0x677e46ec: System_Runtime_Remoting_ni+0x000746ec
0x677e8408: System_Runtime_Remoting_ni+0x00078408
0x7926eb8d: mscorlib_ni+0x001aeb8d
Run Code Online (Sandbox Code Playgroud)

那告诉我什么?

.net c# mfc interop handle-leak

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

声明在一个解决方案中相互依赖的nuget包

我们有很多项目的解决方案,以及这些项目之间或多或少复杂的依赖图.现在每个项目都应该成为自己的nuget包,nuget包的依赖图应该反映项目的内容.

我有两个问题:

  1. 是否有可能在保持所有项目在同一解决方案中的同时实现这一目标?如果是这样的话?
  2. 可取的,以保持所有项目在同一个解决方案吗?对此有什么共同/"最佳实践"方法?

nuget nuget-package nuget-spec

13
推荐指数
2
解决办法
1914
查看次数