在C#中调用和调试C++代码

在使用.NET开发时,由于种种原因,可能希望使用C++编写部分代码,例如希望通过使用C++提高性能,或是希望重用既有的代码。而.NET平台提供了平台调用(P/Invoke)功能,可以方便地调用其他语言编写的动态链接库(dll)。平台调用功能可以在各种.NET环境,包括.NET Core、.NET Framework、UWP下使用。

继续阅读“在C#中调用和调试C++代码”

解决Entity Framework Core 2.0命令行工具与UWP不兼容的问题

如果你在一个面向16299以上版本系统的UWP项目中使用Entity Framework Core 2.0,使用Add-Migration等命令行工具时,命令行工具会直接拒绝运行,出现如下错误信息:

Startup project 'App4' is a Universal Windows Platform app. This version of the Entity Framework Core Package Manager Console Tools doesn't support this type of project. For more information on using the EF Core Tools with UWP projects, see https://go.microsoft.com/fwlink/?linkid=858496

继续阅读“解决Entity Framework Core 2.0命令行工具与UWP不兼容的问题”

替代lock语句块实现await独占访问

C#中有lock语句块和Monitor类可以实现线程锁,实现对资源的独占访问。但是,当像下面这样试图在lock语句块中使用await时会出现错误,无法生成:

lock (streamReader)
{
    await streamReader.ReadLineAsync();
} //编译错误

此时,也不能自作聪明地使用Monitor类实现线程锁,那样虽然能够生成,但是执行结果与你设想的是不同的。像下面这样的代码并不能实现独占访问:

Monitor.Enter(streamReader);
await streamReader.ReadLineAsync();
Monitor.Exit(streamReader); //不能实现功能

继续阅读“替代lock语句块实现await独占访问”