Tag: .net

CLR顺序结构布局:对齐和大小

默认情况下,C#中的所有struct都被视为[StructLayout(LayoutKind.Sequential)]标记的值类型。 所以让我们采取一些struct并检查这个struct的大小: using System; using System.Reflection; using System.Linq; using System.Runtime.InteropServices; class Foo { struct E { } struct S0 { byte a; } struct S1 { byte a; byte b; } struct S2 { byte a; byte b; byte c; } struct S3 { byte a; int b; } struct S4 { int a; byte […]

WPF IValueConverter – 将多个值转换为单个值

我正在努力维护别人的代码,因为那个人是WPF专家。 另一方面,我不是。 🙂 该代码使用IValueConverter将状态枚举转换为布尔值,该布尔值控制是否在屏幕上显示UserControl。 我发现了一个缺点,即在这种情况下单个枚举是不够的,实际上还需要考虑另一个布尔值。 是否有另一个可以使用的对象,它会将2个项目作为参数进行转换? (“converter”参数已被使用。) 一个简单的例子如下。 现有代码的逻辑说…… If it’s sunny, go to work. If it’s raining, don’t go to work. 我需要考虑另一件事情,如下所示。 If it’s sunny and you’re wearing pants, go to work. If it’s sunny and you’re not wearing pants, don’t go to work. If it’s raining and you’re wearing pants, don’t go to […]

在.NET线程中花了多少时间?

我有一个带有(4)线程的multithreading应用程序我想知道在线程中花费了多少处理时间。 我用ThreadPool创建了所有这些线程 Thread1做job1 Thread2做job2 .. .. 结果将是: Thread1在12毫秒内运行 Thread2在20毫秒内运行 我实际上是在一个作业中下载一个网页,每个作业在一个线程中处理我想知道网页下载需要多少时间(没有其他线程上下文切换对计算时间的影响)

对.NET中未对齐字段的读写是绝对primefaces的吗?

C#规范( ECMA-334和ISO / IEC 23270 )有一段关于读写的primefaces性: 12.5变量引用的primefaces性 以下数据类型的读取和写入应为primefaces:bool,char,byte,sbyte,short,ushort,uint,int,float和reference类型。 此外,在前一个列表中具有基础类型的枚举类型的读取和写入也应该是primefaces的。 其他类型的读写,包括long,ulong,double和decimal,以及用户定义的类型,不必是primefaces的。 但我很难想象永远是真的。 例如,我可以使用StructLayout属性布局结构,并强制字段不对齐: // sizeof(MyStruct) == 9 [StructLayout(LayoutKind.Sequential, Pack = 1)] struct MyStruct { public byte pad; // Offset: 0 public int value1; // Offset: 1 public int value2; // Offset: 5 } 现在,当我这样做时,我认为对int的写入不是primefaces的,因为它没有与自然边界对齐: MyStruct myStruct = new MyStruct(); myStruct.value1 = 20; 那么,它是绝对primefaces的(就像规范所说的那样),还是不能保证是primefaces的(例如在x86上)? 无论哪种方式,你有任何来源支持这一点吗?

用于Oracle INTERVAL DAY TO SECOND数据类型的NHibernate映射

我挑战我的一位同事的问题并非如此,而是由DBA提出的。 我们在其中一个对象上有一个TimeSpan属性,该属性需要保留。 是的,您可以只从对象的Start和End DateTime属性推断出值,但DBA坚持要将此值保存在数据库表中。 因此,DBA选择保存该值的Oracle数据类型是INTERVAL DAY(2)TO SECOND(6)。 Oracle.DataAccess中的相应类型是OracleDbType.InvervalDS,但是我无法找到与如何使用NHibernate进行映射相关的任何内容。 我们最终得到了这个解决方案 public class SomeTimeSpanTestClass { public virtual string TimeSpanTest { get; protected set; } public virtual TimeSpan ActualTimeSpan { get { // Need to do some formatting of TimeSpanTest before it can be parsed return TimeSpan.Parse(TimeSpanTest); } set { TimeSpanTest = string.Format(“{0}{1} {2}:{3}:{4}.{5}”, value.ToString().Contains(‘-‘) ? “-” : […]

如何在WMI查询上设置超时?

我有一个.NET应用程序,它在所有域计算机上运行WMI查询,以便找到登录用户; 它ping每台计算机以查找它是否在线,然后运行实际查询。 代码段: try { string loggedonuser = null; string computername = “ComputerToQuery”; ConnectionOptions co = new ConnectionOptions(); co.Username = “DOMAIN\MyUser”; co.Password = “MyPassword”; co.Impersonation = ImpersonationLevel.Impersonate; co.Authentication = AuthenticationLevel.Default; ManagementPath mp = new ManagementPath(@”\\” + computername + @”\root\cimv2″); ManagementScope ms = new ManagementScope(mp,co); ms.Connect(); ObjectQuery oq = new ObjectQuery(“SELECT username FROM Win32_ComputerSystem”); ManagementObjectSearcher mos […]

为什么我的listview会继续在LargeIcon View中绘图?

我有一个inheritance的Listview,标准必须在Tile模式下。 当使用这个控件时,DrawItem给出的e.bounds明显是largeIcon视图的界限? 在调试以检查它实际设置为的视图时,它说它在Tile视图中? 然而e.DrawText绘制LargeIcon视图?? ………编辑:…………….. 这似乎只有在控件放在另一个用户控件上时才会发生? ………编辑2:…………….. 它变得陌生……当我在列表旁边添加按钮以在运行时更改视图时, “Tile”与“LargeIcon”相同,而“List”视图与“SmallIcons”相同??? 我也完全删除了所有者… ……….编辑3:…………….. MSDN文档:平铺视图 每个项目都显示为一个完整大小的图标,其右侧有项目标签和子项目信息。 出现的子项信息由应用程序指定。 此视图仅适用于Windows XP和Windows Server 2003家族。 在早期的操作系统上,此值将被忽略,ListView控件将显示在LargeIcon视图中。 那我在XP上了?!? ……编辑4 ………………… 陌生的神圣母亲……我们现在已经完全剥离了所有……我们在表格上有一个标准的列表视图,手动填充3个值。 没有所有者。 它设置为Tile。 当我们开始这个表单时,列表被绘制为LARGEICON。 现在,我们开始另一个空白解决方案,将这个完全相同的表单复制到新项目中,启动调试并低调看看它在TILE视图中绘制???? … 救命 … public class InheritedListView : ListView { //Hiding members … mwuahahahahaha //yeah i was still laughing then [BrowsableAttribute(false)] public new View View { get { return […]

使用C#删除目录上的只读属性

我成功地使用以下代码片段删除了文件的只读属性: 在main.cs中 FileSystemInfo[] sqlParentFileSystemInfo = dirInfo.GetFileSystemInfos(); foreach (var childFolderOrFile in sqlParentFileSystemInfo) { RemoveReadOnlyFlag(childFolderOrFile); } private static void RemoveReadOnlyFlag(FileSystemInfo fileSystemInfo) { fileSystemInfo.Attributes = FileAttributes.Normal; var di = fileSystemInfo as DirectoryInfo; if (di != null) { foreach (var dirInfo in di.GetFileSystemInfos()) RemoveReadOnlyFlag(dirInfo); } } 不幸的是,这不适用于文件夹。 运行代码后,当我转到该文件夹​​时,右键单击并执行属性,这是我看到的: 尽管已将只读标志从其下方的文件中删除,但仍会检查只读标志。 这会导致进程无法删除此文件夹。 当我手动删除该标志并重新运行该进程(一个bat文件)时,它能够删除该文件(所以我知道这不是bat文件的问题) 如何在C#中删除此标志?

异步等待与GetAwaiter()。GetResult()和回调

我正在努力为我的一个项目寻找最佳实践。 它是一个典型的WPF应用程序,其UI显示项目列表,并且有一个返回结果的数据服务。 我们异步调用服务,以便不阻止UI。 我们面前有两个选择: 使用Async await关键字这需要标记所有方法Async from button按钮一直点击到服务层(客户端上的类调用服务器的http)以及其间的任何方法。 除了在任何地方传播异步的问题之外,这种方法工作正常 使用awaiter和callback在这种方法中,UI客户端调用服务层并将回调传递给服务层,服务层将http调用包装到任务中的服务器并使用GetAwaiter()。GetResult(),当http调用时完成它会调用UI客户端传递的回调。 在这种情况下,没有方法必须标记为异步,但不确定GetAwaiter()的使用 Task.Run(async()=> //等待http调用,调用回调).GetAwaiter()。GetResult(); 我只是想找出哪种方法更好,如果有任何方法存在问题我应该注意

在两个字符之间提取字符串?

我想在之间提取电子邮件ID 例如。 输入字符串: “abc” ; “pqr” ; “abc” ; “pqr” ; 输出字符串: abc@gmail.com;pqr@gmail.com