lindexi

林德熙 - 微软最具价值专家和 .NET 基金会成员

林德熙

dotnet 通过 WMI 获取系统补丁

本文告诉大家如何通过 WMI 获取补丁

dotnet 通过 WMI 获取系统安装的驱动

本文告诉大家如何通过 WMI 获取用户已经安装的驱动程序

dotnet 通过 WMI 获取系统启动的服务

本文告诉大家如何通过 WMI 获取系统启动的服务

dotnet 通过 WMI 获取系统信息

本文告诉大家如何通过 WMI 获取系统信息

dotnet 通过 WMI 拿到显卡信息

本文告诉大家如何通过 WMI 拿到显卡信息

dotnet 通过 HttpClient 下载文件同时报告进度的方法

本文告诉大家一个简单的方法通过 HttpClient 下载文件,同时报告下载进度

dotnet 获取程序所在路径的方法

在 dotnet 有很多方法可以获取当前程序所在的路径,但是这些方法获取到的路径有一点不相同,特别是在工作路径不是当前的程序所在的路径的时候

dotnet 获取用户设备安装了哪些 .NET Framework 框架

从注册表可以拿到当前用户安装的 .NET Framework 版本,本文告诉大家如何解析这些信息

dotnet 线程静态字段

在 dotnet 程序提供了一个好用的特性,可以让字段作为线程的静态字段,也就是在相同线程的所有代码访问的静态字段是相同对象,但不同线程访问的时候是不同的

dotnet 特性 DynamicallyInvokable 是用来做什么的

我在 Linq 很多函数都看到 __DynamicallyInvokable 这个特性,这是一个没有官方文档的特性,也许是用来优化反射

dotnet 方法名 To 和 As 有什么不同

在看到 dotnet 框架里面有很多方法里面用了 ToXx 和 AsXx 好像都是从某个类转换为另一个类,那么这两个方法命名有什么不同

dotnet 新项目格式与对应框架预定义的宏

在 sdk style 的项目格式支持使用多框架开发,此时需要在代码里面通过宏判断,在编译的时候执行不同的代码。本文告诉大家在框架里面对应的预定义的条件编译符有哪些

dotnet 数组自动转基类数组提示 Co-variant array conversion 是什么问题

在 C# 的语法,可以提供自动将某个类的数组自动转这个类的基类数组的方法,但是这样的转换在 Resharper 会提示 Co-variant array conversion 这是什么问题?

dotnet 控制台读写 Sqlite 提示 no such table 找不到文件

在使用 dotnet 读写 Sqlite 可以通过 EF Core 的方法,但是在 EF Core 创建的数据库可能和读写的数据库不是相同的文件

dotnet 控制台 Hangfire 后台定时任务

本文告诉大家如何在 dotnet core 的控制台通过 Hangfire 开启后台定时任务

dotnet 如何调试某个文件是哪个代码创建

我发现了自己的软件,会在桌面创建一个 1.txt 文件,但是我不知道是哪个代码创建的,那么如何进行快速的调试找到是哪个代码创建的

dotnet 如何在 Mock 模拟 Func 判断调用次数

在 dotnet 程序有很好用的 Mock 框架,可以用来模拟各种接口和抽象类,可以用来测试某个注入接口的被调用次数和被调用时传入参数。本文告诉大家如何在 Mock 里面模拟一个 Func 同时模拟返回对象,获取调用次数

dotnet 动态代理魔法书

看到标题的小伙伴是不是想知道什么是魔法书,如果你需要写一段代码,这段代码是在做神奇的业务,只有你查询到了魔法书你才能找到这个对象,同时你还需要实现自己的接口,通过自己实现的接口调用才能用到有趣的方法

dotnet 判断程序当前使用管理员运行降低权使用普通权限运行

有一些程序是不想通过管理员权限运行的,因为在很多文件的读写,如果用了管理员权限程序写入的程序,其他普通权限的程序是无法直接访问的。 本文告诉大家如何判断当前的程序是通过管理员权限运行,然后通过资源管理器使用普通权限运行

dotnet 删除只读文件

如果直接通过 File.Delete 删除只读文件会出现没有权限提示,可以先设置文件不是只读然后删除文件

dotnet 使用 lz4net 压缩 Stream 或文件

在 dotnet 可以使用 LZ4 这个无损的压缩算法,这个压缩算法的压缩率不高但是速度很快。这个库支持在 .NET Standard 1.6 .NET Core .NET Framework Mono Xamarin 和 UWP 运行

dotnet 使用 MessagePack 序列化对象

和很多序列化库一样,可以通过 MessagePack 序列化和反序列化,和 json 相比这个库提供了二进制的序列化,序列化之后的内容长度比 json 小很多

dotnet core 黑科技·String.IndexOf 性能

本文来告诉大家 dotnet core 里面使用的黑科技,如何提高String.IndexOf(char)的性能

dotnet 使用 GC.GetAllocatedBytesForCurrentThread 获取当前线程分配过的内存大小

在 dotnet framework 4.8 的时候支持调用 GC.GetAllocatedBytesForCurrentThread 获取当前线程分配过的内存大小

dotnet 通过 WMI 获取系统安装软件

本文告诉大家如何通过 WMI 获取系统安装的软件,这个方法不能获取全部的软件

git 分支改名

给一个git分支改名的方法很简单

dotnet 设计规范 · 数组定义

本文告诉大家数组定义需要知道的规范,本文翻译 docs dotnet

git rebase 合并多个提交

rebase可以修改记录,我总是做小更改就提交,仓库有好多看起来很乱的 git没有可以把最后一个提交提交到服务器的能力,可以用rebase来做到把多个提交合并为一个。使用这个命令很简单,下面就来告诉大家如何使用这个命令

git 合并两个仓库

好了还是回到问题,我想把两个git合并

git cannot lock ref

如果在 git 准备下载仓库的时候,出现下面的错误 cannot lock ref ‘refs/remotes/origin/xx’:’refs/remotes/origin/xx/xx’ exists cannot create ‘ref/remotes/origin/xx’ 那么请看本文,本文提供了一个解决方法。

WPF 延迟加载

参见:http://www.cnblogs.com/wpfworld/p/3181014.html

WPF shows that some windows in multithreading will be locked in the PenThreadWorker constructor when the application starts

Problem description: WPF will initialize pen thread when the window initializing. But I find the window may be locked in PenThreadWorker constructor. The UnsafeNativeMethods.CreateResetEvent will lock the thread.

Actual behavior: I use multithreading to create some windows by this code and maybe the thread be locked in PenThreadWorker constructor. The Demo code

    public partial class App : Application
    {
        /// <inheritdoc />
        protected override void OnStartup(StartupEventArgs e)
        {
            var thread = new Thread(() =>
            {
                var mainWindow = new MainWindow();
                mainWindow.Show();
                Dispatcher.Run();
            });
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            base.OnStartup(e);
        }
    }

The step

  1. Run the code
  2. Use the VisualStudio to suspend the application Maybe you can find the application only create a Stylus Input thread and show only a main window and the other main window and the thread be locked in PenThreadWorker constructor and the window can not show Why I need multithreading to show the windows? I need the splash window to show the welcome page and then I should show the main window in other thread to do the bussiness code and I should close the splash window when the main window showed. But I found some users could not show the main window and the main window be lock in PenThreadWorker constructor. I use dnspy to suspend the application and find the code run in PenThreadWorker constructor and the UnsafeNativeMethods.CreateResetEvent will lock the thread.
     PenThreadWorker..ctor()  
     PenThread..ctor()  
     PenThreadPool.GetPenThreadForPenContextHelper(PenContext penContext)  
     PenThreadPool.GetPenThreadForPenContext(PenContext penContext)  
     WispTabletDeviceCollection.UpdateTabletsImpl()  
     WispTabletDeviceCollection.UpdateTablets()  
     WispTabletDeviceCollection..ctor()  
     WispLogic.get_WispTabletDevices()  
     WispLogic.RegisterHwndForInput(InputManager inputManager, PresentationSource inputSource)  
     HwndStylusInputProvider..ctor(HwndSource source)  
     HwndSource.Initialize(HwndSourceParameters parameters)  
     HwndSource..ctor(HwndSourceParameters parameters)  
     PresentationFramework.dll!System.Windows.Window.CreateSourceWindow(bool duringShow)  
     PresentationFramework.dll!System.Windows.Window.CreateSourceWindowDuringShow()  
     PresentationFramework.dll!System.Windows.Window.ShowHelper(object booleanBox)  
    

    Expected behavior: The UnsafeNativeMethods.CreateResetEvent do not lock the thread

Minimal repro:

Create a empty WPF application and then change the app.xaml.cs code

    public partial class App : Application
    {
        /// <inheritdoc />
        protected override void OnStartup(StartupEventArgs e)
        {
            var thread = new Thread(() =>
            {
                var mainWindow = new MainWindow();
                mainWindow.Show();
                Dispatcher.Run();
            });
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            base.OnStartup(e);
        }
    }

Run the code and maybe you can find one of the main window can not show and it stop in UnsafeNativeMethods.CreateResetEvent and I wait for a hour but it can not run.