我通过设置<dpiAware>True/PM</dpiAware>清单文件使每个监视器的应用程序dpi感知.我可以使用进程资源管理器验证这确实有效,或者通过调用GetProcessDpiAwareness来验证.
这一切都运行正常,我可以在我的代码中很好地扩展客户端区域中的任何内容.但是,我唯一的问题是,如果我将我的应用程序从system-dpi监视器拖到非系统dpi监视器,标题栏和任何系统菜单将变得太大或太小.对于大多数内置应用程序(例如计算,边缘浏览器等),情况并非如此,因此必须妥善扩展它.MS的开发人员有没有这样做过?
下面的截图应该更好地解释我的问题.另请注意,关闭,最小和最大按钮之间的填充在缩放(96dpi)时是不同的.

示例应用程序我附加了一个非常简单的应用程序,每个监视器dpi意识到.
这些似乎有些模棱两可.我在整个项目中交替使用它们,唯一的原因是因为我无法弄清楚何时使用其中一个.
一个是真的而另一个不是的情况会怎样?
如果我只使用ASP.NET身份对用户进行身份验证,那么一个或另一个更有利还是真的无关紧要?
我需要在核心界面中定义返回列表的方法.我的项目很大程度上依赖于使用async/await所以我需要将我的核心引用/接口定义为尽可能异步.我还将EF7用于我的数据访问层.我目前IAsyncEnumerable到处使用.
我目前正在决定是继续使用IAsyncEnumerable还是恢复使用Task<IEnumerable<T>>.IAsyncEnumerable在这一点上似乎很有希望.EF7也在使用它.麻烦的是,我不知道也无法弄清楚如何使用它.网站上几乎没有任何内容告诉任何人如何使用Ix.Net.有一个ToAsyncEnumerable我可以在IEnumerable对象上使用的扩展,但这不会异步做任何事情(或者它?).另一个缺点是给出以下签名:
IAsyncEnumerable GetPersons();
Run Code Online (Sandbox Code Playgroud)
因为这不是返回Task的函数,所以我不能在函数块中使用async/await.
另一方面,我的直觉告诉我,我应该坚持使用Task<IEnumerable<T>>.这当然也有它的问题.EF没有返回此类型的扩展方法.它有一个ToArrayAsync和ToListAsync扩展方法,但当然,这需要你打电话等待方法中,因为Task<T>不是协变的.这可能是一个问题,因为这会产生额外的操作,如果我只是返回Task对象就可以避免这种操作.
我的问题是:我应该继续使用IAsyncEnumerable(首选)还是应该将所有内容更改回Task<IEnumerable<T>>(不是首选)?我也对其他建议持开放态度.
c# ×2
.net ×1
asp.net ×1
asp.net-core ×1
async-await ×1
c++ ×1
dpi ×1
winapi ×1
windows-10 ×1
windows-8.1 ×1