为 .NET 程序嵌入最小的 Chromium 浏览器核心 Miniblink,以 Web 方式来开发和维护程序


.NET 桌面程序一般使用传统的 WinForm 或者较新的 WPF 来进行开发。
WinForm的优点是流程简单,即拖即用;但缺点是布局方式较为简陋,维护和更新困难,想要美化界面则需要涉及底层的子类化、或者重写控件绘制。
WPF 曾是微软大力推广的新型UI设计方案,采用XAML(XML)来绑定控件与代码,做到前后端分离,结构上与HTML非常相似。然而微软这种重复造轮子的行为,不仅没能推广WPF,反而因为复杂的学习成本,导致WPF一直处于叫好不叫座的尴尬境地。其实 .NET 早就该拥抱HTML这种通用的界面方案,何必再弄个WPF来脱裤子放屁呢?

其实在 .NET 中应用 Web 界面的方法有不少,最简单的就是使用内部的 WebBrowser 控件,其本身支持通过COM方式与本地代码交互,只不过因为 WebBrowser 使用的是IE内核,无法支持最新的HTML5标准,所以在设计界面时会束手束脚,也无法应用HTML最新的特性。

比较常用的方式是使用第三方的 Chromium 库如 CefSharp,但缺点就是太臃肿了!!!如果你只是写一个小程序,不会想拖个几百兆的 Chromium 运行库进去吧?

另外,微软也推出了 WebView2 组件,用于代替IE内核的 WebBrowser,只不过它需要安装运行库,且内核用的是 Edge 版本的 Chromium 内核,肯定不如原版 Chromium 迅捷。

而除了 CefSharp 和 WebView2 之外的选择,就是我今天要介绍的 Miniblink 了!

- 阅读全文 -

让 SQLite.NET 支持 REGEXP 及自定义函数



SQLite 是免费、开源的内嵌式文件数据库,不需要服务器端,也没有客户端的限制,采用的是内嵌方式或者是动态链接,用来访问和改写数据库文件。SQLite 是许多操作系统(如安卓和Linux)的默认数据库,比微软的 ACCESS 高不知道哪里去。

目前最新版的 SQLite 已支持许多流行的查询函数,比如 JSONREGEXP 等。其中 REGEXP 可以对字段进行正则匹配,JSON 则是可以直接读写JSON格式的文本内容。
然而目前 SQLite 的 .NET 版本仅支持 JSON 相关函数,REGEXP 的正则匹配函数并不支持。

好在 SQLite 的扩展性非常高,我们可以自行为 SQLite 添加函数,用于补齐 SQLite.NET 内不支持的函数。
并且,由于我们采用 .NET 的正则处理类,所以我们可以使用更加标准的正则语法,而非 SQLite 较为“畸形”和不便的原生规则。

- 阅读全文 -

【VB.NET】程序域与反射,如何正确使用程序域



dotNET 中拥有“反射”这一机制,可以在运行时动态加载类库、分析类型、创建对象、调用方法属性等。因此,反射非常适合做插件系统或是动态内容更新。
然而反射拥有一个非常致命的缺点:已被加载的程序集,是无法在程序运行期间卸载的!!!
没错,如果你使用了反射功能,那么所有被加载的程序集,会一直占用你的内存,直到你关闭程序。

那么是否有方法可以在程序运行期间动态加载与卸载程序集呢?
答案就是“AppDomain(程序域)”。

- 阅读全文 -

【VB.NET】使用 NLua 来为程序添加 Lua 脚本支持


Lua 是一款免费开源的嵌入式脚本语言,使用C语言开发,轻量、敏捷、可扩展性强,因此有许多程序使用Lua作为自己的脚本开发环境,用于程序的热更新、插件系统、或是逻辑代码等等。

Lua采用C语言开发,因此C、C++可以直接将其集成到程序内部,其他语言也可以使用 Lua 的动态运行库,将其动态加载到自己的程序中。

如果想在.NET中使用Lua,目前的方案也有许多,但我个人比较推荐 MoonSharpNeoLuaNLua,其中 MoonSharp 和 NeoLua 是完全用C#写的基于Lua5.2、5.3的.NET库,而 NLua 则是基于Lua官方的DLL运行库所包装的.NET库(支持最新的LUA5.4)。
速度上应该是 NLua 更快,兼容性最高,所以本文将采用 NLua 作为教程。

- 阅读全文 -

【VB.NET】使用 VlcLib(VlcDotNet)播放在内存中的视频流

在WPF程序中,我们可以使用 MediaElement 控件播放视频,只要我们的系统中拥有相应的解码器即可。
即便Windows系统中没有相关的解码器,我们也可以通过安装一些解码器补丁程序(如 K-Lite Basic ),来增强和补完系统的媒体解码器。

虽然播放格式的问题可以通过第三方插件解决,然而 MediaElement 有一个致命的缺点,那就是它仅支持从本地或是网络地址来加载媒体文件,并不能通过数据流加载媒体,因此在使用时有许多的限制。

好在我们可以通过使用第三方的媒体库 VlcLib 来解决这个问题,让我们的 WPF 或是 WinForm 程序实现从文件流、内存流中加载媒体文件,并且其自身就拥有丰富的解码器插件,因此并不需要第三方或是系统解码器的支持,即可播放绝大部分的视频格式!

- 阅读全文 -

System.Net.Sockets.SocketException: 无法加载或初始化请求的服务提供程序

今天发现我的系统盘只剩下6GB的空间,吓了一跳,赶紧想办法删除一些C盘里的垃圾文件和不用的程序、系统组件。
等我删得差不多的时候,才发现原来是wamp的临时文件吃掉了我大部分的硬盘空间……(开启DEBUG模式后)

删除文件、重启电脑之后,突然所有使用 .net sockets 库的程序都引发了“无法加载或初始化请求的服务提供程序”的错误。
刚开始我还以为自己误删了 System.Net.Sockets.dll ,又赶忙去网上找了一个最新版的 sockets.dll 放到程序目录下,然而还是无法顺利启动程序。
之后Bing了一下,才发现根本不是丢失文件的问题,而是因为 winsock 的系统服务似乎被关闭了。

解决方法很简单,开始-运行-CMD,使用下面的代码即可:

netsh winsock reset  
网上的文章说需要重启电脑,但是我测试发现并不需要,只要开启 winsock 的服务就可以立刻使用发生错误的程序了。
留个笔记,防止今后再发生这种事情……

- 阅读全文 -

vb.net 中的三元运算符

在C系语言中,可以通过 表达式 ? 返回结果 : 替代方案 来定义一个三元运算符,而VB.NET则只能 IIf 这个表达式来代替三元运算符的功能。

那么 VB.NET 中有能代替 IIf 的三元运算符吗?

- 阅读全文 -

vb.net 载入私有字体、私有字符集

在.NET中载入一个独立的字体文件其实很容易,但如果你想将这个字体文件内嵌到程序之中,则会不可避免地碰到控件字符绘图的深坑。
那么该如何避免这些坑呢?

- 阅读全文 -

將頁面轉換爲繁體

公告

欢迎您光临鄙人的小站,虽然没什么太专业的东西,不过如果本站的文章能让您有所收获、或者仅仅是博您一笑,那么也不枉费我建站的辛苦了!

您可以使用邮件订阅来获得邮件更新提醒。

瞎哔哔

    服务器后台更新,已使用了服务商内置的CDN,缓解最近老是断连的问题。
    不过因为后台机制变了,所以有可能出现SSL配置错误的问题,等我弄明白新后台的使用方法再说。
    希望以后不要再出幺蛾子了。 :doge:

  • 查看更多...

最新文章

随机文章

最近回复

分类

标签