小编Bil*_*ill的帖子

在.NET中创建ZIP存档的最佳/最简单方法是什么?

你认为哪种方法是"最好的".

  • 使用System.IO.Packaging命名空间?
  • 使用与Shell的互操作?
  • .NET的第三方库?
  • 与开源非托管DLL互操作?

[我可以针对框架3.5; 最好=最容易设计,实施和维护.

我最感兴趣的是你认为所选方法最好的原因.

.net c# zip

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

在WPF中动态更改旋转动画

我正在使用DoubleAnimation来动画RotationTransform的Angle属性.每秒几次,我需要根据外部数据改变旋转速率,以便随着时间的推移旋转速度加快和/或减慢(平滑).我目前正在通过使用DoubleAnimation来实现这一点,DoubleAnimation从持续时间为X,然后每秒数次,从0.0到360.0永久重复:

  • 从外部数据中获取新值
  • 将DoubleAnimation上的速率修改为该值
  • 再次将DoubleAnimation重新应用于Angle属性

注意:我确实发现我必须将动画上的To和From属性更改为"当前角度"和"当前角度+ 360" - 幸运的是,RotationTransform在角度> 360度时没有问题 - 以防止开始旋转从零角度再次.

我的问题是:这合理吗?它似乎并非如此.在旋转变换上不断将新的DoubleAnimations应用于Angle属性似乎是错误的 - 有点像我让WPF为旋转设置动画,而自己动画旋转速度.

有没有更好的办法?

c# wpf animation xaml transform

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

什么是Win32 PulseEvent()函数的替代品?

Win32 API PulseEvent()函数(kernel32.dll)的文档声明此函数"......不可靠,不应被新应用程序使用.相反,使用条件变量".但是,条件变量不能像(命名)事件那样跨进程边界使用.

我有一个跨进程,跨运行时(本机和托管代码)的场景,其中单个生产者偶尔会有一些有趣的东西让或更多的消费者知道.现在,生产者使用此PulseEvent函数使用一个众所周知的命名事件(并设置为信号状态),当它需要知道某些事情时.零个或多个消费者等待该事件(WaitForSingleObject())并在响应中执行操作.在我的场景中不需要双向通信,并且生产者不需要知道事件是否有任何监听器,也不需要知道如果该事件是在成功地采取行动.另一方面,我不希望任何消费者曾经错过任何事件.换句话说,系统需要是完全可靠的-但是生产者并不需要知道,如果是这样的话该场景可以被认为是"时钟自动收报机" - 即,生产者为零个或多个消费者提供半常规信号以供计数.并且所有消费者必须在任何给定的时间段内具有正确的计数.允许消费者进行轮询(表现原因).自动收报机只有几毫秒(20左右,但并非完全正常).

Raymen Chen(The Old New Thing)有一篇博客文章指出了PulseEvent()函数的"根本缺陷"性质,但是我没有看到陈的陈述或发布的评论的替代方案.

任何人都可以建议吗?

请记住,IPC信号必须跨越机器上的处理边界,而不仅仅是线程.解决方案需要具有高性能,因为消费者必须能够在每个事件的10ms内采取行动.

winapi synchronization ipc

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

在WPF中显示动态数据的好方法是什么?

我正在努力处理具有动态数据更新的WPF应用程序的最佳方法.我应该使用WPF提供的丰富数据绑定吗?

我将在下面的讨论中尽可能简化我的问题域,并简要提一些解决方案.我对这个社区可以提供的任何评论都很感兴趣.

简化的问题域:假设你有1000项,每一个独特的"系统名称 "和动态的" 速度 "和" 位置 ".这些项目的数据每秒更新60次.您希望这些数据显示在各种UI的用户-一切从图形化的拨号/平方米/仪表/ ETC"显示数字标签".WPF的完美工作 - 将视觉效果与应用程序的其余部分分开.你会如何设计这个系统?

我的第一个解决方案:我的第一个解决方案是定义一个名为" DataItem "的具有速度和位置属性(双精度)的对象,定义一个带有name属性(string)的接口.显示数据的控件必须实现名称接口,创建了一个"DataManager",用于扫描实现接口的FrameworkElements,在初始化时为列表构建名称/ FrameworkElements对.然后,每秒60次,更新1,000个DataItem的列表,并将每个匹配的FrameworkElement的DataContext设置为DataItem对象.这是有效的,性能是可以接受的(特别是如果数据并不总是在变化).

我的第二个解决方案解决了第一个解决方案中的UI控件都必须实现某些接口的问题 - yuk.我想使用开箱即用的未经修改的WPF控件(在某些情况下).所以,第二个解决方案是定义一个"附加属性"(我把它放在DataManager对象上),所以你可以 - 在xaml中 - 做类似的东西

<Label DataManager.Name = "objectname"  Content="{Binding}" />
Run Code Online (Sandbox Code Playgroud)

不知何故,这个解决方案似乎仍然不对.我的第三个解决方案是研究实现自定义DataSourceProvider.我没有成功.我无法理解数据源提供程序模型,以及在这种情况下如何使用它.

现在,我正在研究Microsoft Research发布的CodePlex"动态数据显示"项目.该项目完全是关于绘制/绘制动态数据的,但可能会有一些想法.所以我在StackOverflow上 - 通常是一个简短问题和快速答案的地方.:-)

我是WPF的新手,非常感谢任何人对这些问题的看法.请记住,此处指定的问题域已经简化,因此我需要一个强大的解决方案.实际上有许多不同类型的数据对象,每个对象具有不同的属性; 并且每个对象的数据更新速率不同,UI控件显示单个项目和项目组,数据来自多个来源,等等.

data-binding wpf

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

Wpf自定义控件模板 - 相对字体大小

我正在创建一个自定义WPF控件,为简单起见,我们说有一个带有"标题"TextBlock的垂直堆栈面板,后面跟一个ContentPresenter.我希望"标题"的字体大小比内容中使用的大小高5个点,这是由用户放置此控件的任何容器继承的.

如何使用相对值在控件模板中为头元素指定字体大小,而不向用户公开类似"TitleFontSize"的属性?我想做"加5".

我尝试在标题文本块上使用ScaleTransform并使用混合结果(文本块缩放得很好,但方向已被修改 - 我将文本右对齐,并在缩放时移出"离开控件"区域).另外,我不确定缩放变换是否适合这里.

wpf templates custom-controls

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

如何编写代码分析(FxCop)规则来阻止方法调用

如何为vs2008编写代码分析工具以防止特定的框架调用,例如GC.WaitForFullGCComplete()或Application.DoEvents()

我尝试在我的自定义规则中覆盖VisitMethodCall,但我无法弄清楚Microsoft.FxCop.Sdk.MethodCall参数在其中的真正含义.无法在网络上找到示例.

有人能指出我正确的方向吗?

.net fxcop

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

如何确定iPhone上的默认网关?

我需要在iPhone应用程序中获取默认网关的IP地址.我找不到合适的API.有人知道iPhone是否公开了这些信息?

iphone objective-c

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

阻止开发人员调用System.Windows.Forms.Application.DoEvents()的最佳方法是什么?

我们花了300个工时来修复现场的错误应用程序.这一切都归结为调用Application.DoEvents(re-entrancy problem).

这没有在设计评论,代码评论中发现.两年前插入的代码是第一个版本; 应用程序总是"不稳定",但最近的变化在很大程度上暴露了重新入侵问题.

此事件是我们组织中第二次发生Application.DoEvents导致失败和多人工作时间的调试.在这种情况下,通过简单地注意到调用,在一个异步任务的复杂事件处理程序中埋下来,就发现了它.

你有什么建议可以防止这个问题再次发生:

  • 添加签入门到源代码管理?
  • 开发者培训?
  • 代码分析规则(为什么这不是内置规则?)

如何执行编码练习?

.net c# vb.net

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

如何更新Joel Test 2010?

我相信Joel Test是在2000年写的.现在是时候让更新与现代更加一致了.我会开始:

  1. 你使用源代码控制吗?

变成

  1. 每次办理登机手续都有质量门吗?

许多Joel Test假设不再适用.我认为我们今天不需要询问组织是否使用源代码控制,包含错误数据库,或者是否具有"规范".另一方面,一些Joel测试项目与以往一样重要:最新的时间表和最先进的工具.

帮我更新2010年的清单,以便我再次将它带到管理层.

configuration-management

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