草庐IT

@Async失效情况

全部标签

c# - 在实现具有同步和异步 API 的库以实现相同功能时使用 async await

关于如何在库中提供相同功能的同步和异步实现,我有几个问题。我会先问他们,然后提供下面的示例代码(实际上很多,但实际上很简单)。有没有办法避免违反DRY原则?考虑JsonStreamReader.Read的实现,JsonStreamWriter.Write,JsonStreamWriter.Flush,ProtocolMessenger.Send,ProtocolMessenger.Receive及其异步版本。在对同一方法的同步和异步版本进行单元测试时,是否有一种方法可以避免违反DRY原则?我正在使用NUnit,尽管我想所有框架在这方面应该都是一样的。应该如何实现返回Task的方法或Ta

c# - 如何在没有第三方库的情况下序列化对象+压缩然后解压+反序列化?

我在内存中有一个大对象,我想将其作为blob保存到数据库中。我想在保存之前压缩它,因为数据库服务器通常不在本地。这是我目前拥有的:using(varmemoryStream=newMemoryStream()){using(vargZipStream=newGZipStream(memoryStream,CompressionMode.Compress)){BinaryFormatterbinaryFormatter=newBinaryFormatter();binaryFormatter.Serialize(gZipStream,obj);returnmemoryStream.ToA

c# - 在不实际验证签名的情况下确定文件是否在 C# 中具有数字签名

有没有一种简单的方法可以检查文件上是否存在数字签名,而无需尝试验证签名所用的证书?我想对目录中的一长串exe和dll文件进行签名,但仅限于尚未签名的文件。例如,如果其中一个文件已由Microsoft或其他某个第3方签署,我不想使用我公司的证书再次签署它们。通过右键单击文件并查看其属性可以很容易地检查文件是否具有数字签名(如果出现数字签名选项卡则表明它已被签名)。我正在寻找一种使用C#检查此数字签名属性的简单方法。现在,我正在使用带有signtool.exe的验证命令-它不仅会检查数字签名是否存在,还会检查用于签署文件的证书是否由受信任的机构颁发。这是我执行此操作的简单但笨拙的方法:pr

c# - 为什么在没有 new() 泛型类型约束的情况下允许 Activator.CreateInstance<T>() ?

在下面显示的示例代码中,“CompileError”方法不会编译,因为它需要whereT:new()CreateWithNew()中所示的约束方法。然而,CreateWithActivator()方法在没有约束的情况下编译得很好。publicclassGenericTests{publicTCompileError()//compileerrorCS0304{returnnewT();}publicTCreateWithNew()whereT:new()//buildsok{returnnewT();}publicTCreateWithActivator()//buildsok{ret

c# - 在不锁定集合的情况下从通用集合中获取 Count 值是安全的吗?

我有两个线程,一个生产者线程将对象放入通用列表集合中,另一个消费者线程将这些对象从同一个通用列表中拉出。我已经使用lock关键字正确同步了对集合的读取和写入,并且一切正常。我想知道是否可以在不先锁定集合的情况下访问Count属性。JaredPar引用计数属性inhisblog作为可能导致竞争条件的决策程序,如下所示:if(list.Count>0){returnlist[0];}如果列表中有一个项目,并且在访问Count属性之后但在索引器之前删除了该项目,则会发生异常。我明白了。但是使用Count属性可以确定一个完全不同的集合的初始大小吗?MSDNdocumentation说实例成员不

c# - 如何在不更改内容字体的情况下更改 TabItem 的标题字体?

如何在不更改内容字体的情况下更改TabItem标题中的字体?当我在TabItem中设置FontSize属性时,它还会更改TextBlock上的FontSize。 最佳答案 你可以这样做—— 关于c#-如何在不更改内容字体的情况下更改TabItem的标题字体?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5753335/

c# - 如何在知道有误差的情况下比较小数

我有两种不同的方法来计算一个值。两种方法运行后,我得到以下信息:decimala=145.2344;decimalb=145.2345;我有一个单元测试:Assert.AreEqual(a,b);我希望能够解释+/-.0001的差异。如何添加此规则? 最佳答案 在NUnit'sconstraintmodel,你可以这样做:Assert.That(Math.Abs(a-b),Is.LessThan(0.0001M));更好的是,让它成为一个函数:voidAssertDiff(decimala,decimalb,decimaldiff=

c# - Autofac:如何在不绕过 IoC 容器的情况下限制 IDisposable 对象的生命周期

我目前正在学习如何使用Autofac,而且我一直坚持处理IDisposable对象确定性。在我陈述我的问题之前,让我先介绍一下情况。起始位置:假设我的对象模型是通过以下接口(interface)定义的:interfaceIApple:IDisposable{voidConsume();}interfaceIHorse{voidEat(IAppleapple);//issupposedtocallapple.Consume()}interfaceIHorseKeeper{voidFeedHorse();//issupposedtocallhorse.Eat(apple)//where'h

c# - 在 WPF 中配置 ListBox,这样我就可以在不按住 CTRL 键的情况下选择多个项目

我有一个允许用户选择多个项目的列表框。通常用户可以通过按住CTRL键并单击他或她想要选择的项目来完成此操作。是否可以配置此列表框,以便用户在选择项目时不必按住CTRL键?这样他或她将只需单击该项目(不持有任何东西)并且该项目将被选中(如果之前已选中则取消选中)?谢谢 最佳答案 使用SelectionMode="Multiple"来自MSDN:TheSelectionModepropertydetermineshowmanyitemsausercanselectatonetime.YoucansetthepropertytoSingl

c# - 如何在不知道 T 是什么的情况下将 T 类型的项目添加到 List<T>?

我正在处理一个事件,该事件传递指向一个列表和一个T新项目的事件参数,我的工作是将新项目添加到列表中。如果不检查我知道T可能是的所有类型,我该如何做到这一点?当前的代码是这样的几十行:privatevoidDataGridCollectionViewSource_CommittingNewItem(objectsender,DataGridCommittingNewItemEventArgse){Typet=e.CollectionView.SourceCollection.GetType();if(t==typeof(List)){Listsource=e.CollectionView