C#
文章平均质量分 59
lishuangquan1987
博客迁移地址:http://blog.lishq.cn
展开
-
WPF界面设计学习
wpf界面设计学习,以此激励原创 2022-09-16 13:59:42 · 2826 阅读 · 0 评论 -
WPF字体大小随着控件大小自动变化
参考文章:https://blog.csdn.net/ljz_1985/article/details/17141087。实现的效果如下所示:(不使用ViewBox)当窗体变大或者缩小时,计算字体大小,然后绑定。原创 2022-09-12 15:52:11 · 4716 阅读 · 4 评论 -
接口与抽象类的相同与不同
个人理解如下(活到老,学到老,不同编程阶段不同场景下都有新的体会)代码示例及抽象场景稍后提供。原创 2022-08-27 11:29:16 · 172 阅读 · 0 评论 -
基于NLua实现使用lua脚本中多线程执行方法
使用C#+Lua的方式,可以有很多库,比如NLua,XLua等,但是我个人还是喜欢用NLua.对于很多自动化控制项目,使用C#+Lua简直完美由于有使用Lua脚本启动线程去同时执行多个方法的需求,所以这里将C#+Lua基于多虚拟机的机制来实现在Lua脚本中用线程去执行Lua方法所踩过的坑记录下来。......原创 2022-07-18 11:36:45 · 1755 阅读 · 2 评论 -
Winform/WPF async/await容易引起死锁的解决办法
winform/wpf async/await 死锁原创 2022-06-01 14:05:17 · 1588 阅读 · 0 评论 -
.net源码解读之List<T>
我们知道,List与数组的区别是,可以Add元素,但是这是如何实现的呢?翻看源码,解开面纱,发现List的内部实现,就是使用数组实现的。List的源码地址:https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs,cf7f4095e4de7646部分源码片段解答:public class List<T> : IList<T>, System.Collections.IL原创 2022-02-10 22:20:14 · 544 阅读 · 0 评论 -
Prism.Wpf从自定义Main函数中启动遇到的问题
最近想整一个插件式开发框架,想把UI做成一个类库,从另外一个类库的Main函数去启动它,当然UI肯定要用到MVVM框架Prism,插件开发时,窗体Show出来还要进行其他一些列的操作,才调用App.Run方法,为了保持运行顺畅,做了不少功课。之前我写过一篇文章,里面讲解Prism的使用:https://blog.csdn.net/lishuangquan1987/article/details/105014992通过查看Prism的源码,Container容器是在OnStartup函数中初始化的:Pr原创 2021-05-08 11:24:49 · 1005 阅读 · 0 评论 -
MVVM处理TreeView的SelectedItem的绑定的两种方式
TreeView的SelectedItem不支持MVVM绑定:因为它是只读的。有时候我们就需要对它进行绑定1.使用自定义Behavior需要引用System.Windows.Interactivity.dll自定义Behavior如下:public class TreeViewBehavior : Behavior<TreeView> { public object SelectedItem { get { ret原创 2021-03-29 18:32:31 · 3477 阅读 · 0 评论 -
C# VLC播放视频实现布满在控件上
VLC的C#库:https://github.com/ZeBobo5/Vlc.DotNet使用VLC播放视频时,有时候视频尺寸与播放的控件大小不一样,导致有黑的边框,如下图所示:这个问题,在Issue区也有人提出过:https://github.com/ZeBobo5/Vlc.DotNet/issues/652现解决方案如下:internal class VLCPlayer { const string VLC_LIB_DIRECTORY = @".\VLC";原创 2021-03-04 12:41:44 · 1860 阅读 · 3 评论 -
WPF 拖拽帮助类
public class DragDropHelper { #region Fields private FrameworkElement _sourceElement; private IEnumerable<FrameworkElement> _potentialTargets; protected bool m_IsDraging = false; protected Point m_DragStar原创 2021-02-04 10:47:40 · 256 阅读 · 0 评论 -
WPF简单自定义控件模板之TextBox
WPF中自带的TextBox的外观如下:现在要把它变成有水印提示的TextBox,并且主题可以改变:白色主题:黑色主题:以下是自定义控件需要考虑的:1.需要为TextBox增加一个水印属性,并且这个水印属性可以自定义设置2.黑白风格的颜色样式水印属性采用附加属性来给TextBox增加水印属性:public class TextBoxHelper: DependencyObject { public static string GetWaterMark(De原创 2020-12-13 12:20:25 · 4489 阅读 · 0 评论 -
代办事项20210722
1.System.Windows.Controls.Primitives 的 ResizeGrip的了解2.System.Windows.Documents 的 AdornerDecorator的了解3.gstreamer的封装4.cefsharp中的IJavascrptCallback的补充原创 2020-12-02 22:41:20 · 265 阅读 · 0 评论 -
C# Gstreamer踩坑实战
公司让我研究gstreamer,过程中踩坑无数,现将经历写下来什么是gstreamer官网:https://gstreamer.freedesktop.org/gstreamer是一个跨平台的播放器,底层用C语言写的,上层用C#,python,java封装过,由于公司有用C#播放视频的场景,所以就决定尝试gstreamer踩坑开始了解了半天这个库,发现需要下载安装,然后才能使用C#调用!!!下载gstreamer到官网,找到下载页:https://gstreamer.freedesktop.o原创 2020-11-28 00:22:23 · 4336 阅读 · 3 评论 -
C#+ElasticSearch.Net 7.3.2 的学习
首先需要将ElasticSearch服务搭建起来,然后能够使用地址去访问,这里主要介绍C#充当客户端向ElasticSearch中添加数据以及查询数据1.新建一个项目,Nuget引用NEST:2.向ElasticSearch中加入数据,加入数据时需要指定索引,我这里的索引是mymodel:通讯模型类:public class Model { public string Name { get; set; } public int Age { get; set;原创 2020-09-02 16:11:39 · 1213 阅读 · 0 评论 -
DB2使用TransactionScope报错的解决方法
DB2使用TransactionScope报如下错误:IBM.Data.DB2.DB2Exception:ERROR [58005] [IBM][DB2/LINUXX8664] SQL0998N 在事务或试探性处理期间出错。原因码:“16”。子代码:“2-FFFFFFFF8004D026”原因:没有配置MSDTC配置步骤:1.Window开始出搜索 “组件服务”2.打开组件服务-》计算机-我的电脑-》Distributed Transaction Coordinator->本地DTC.右原创 2020-09-01 16:08:21 · 686 阅读 · 0 评论 -
Cefsharp C#与JS交互
1.通过Nuget引用Cefsharp我这里引用的是83.4.20版本的2.配置解决方案平台为x64或者x86,一定不能为AnyCpu3.编写要传入前端的C#类,类中包含前端调用的C#后台方法注意,js调用C#,不一定在主线程上调用的,需要用SynchronizationContext来切换到主线程 public class CSObj { private System.Threading.SynchronizationContext context; public原创 2020-07-09 10:58:54 · 5529 阅读 · 0 评论 -
C# 方法拦截器
https://www.cnblogs.com/lwhkdash/p/6728611.html原创 2020-05-20 23:54:42 · 6140 阅读 · 4 评论 -
基于Ice 3.7.2实现C#与C#,C#与JAVA方法的相互调用
基于Ice 3.7.2实现C#与C#,C#与JAVA方法的相互调用本文章实例下载地址:https://github.com/lishuangquan1987/ICETestICE官网:https://zeroc.com/downloads/ice/3.7文档:https://doc.zeroc.com/ice/3.7/release-notes/supported-platforms-for-ice-3-7-3开源地址:https://github.com/zeroc-ice/iceICE是远原创 2020-05-18 00:47:05 · 946 阅读 · 1 评论 -
C#调用C++
C#调用C++DLL的方法,不同参数类型的调用方法1. 参数为基本类型,例如int, float, char等[C++]void fun(int value);void fun(float vaue);void fun(char ch);[C#][DllImport("xxx.dll")]public static extern void fun(Int32 value);[D...原创 2020-05-06 19:27:04 · 2223 阅读 · 0 评论 -
c# 零碎笔记
1.WPF ListViewItem触发双击事件的正确处理方式:<ListView.ItemContainerStyle> <Style TargetType="{x:Type ListViewItem}"> <Setter Property="IsSelected" Value="{Binding IsSelected,Mode=...原创 2019-11-20 17:36:49 · 1270 阅读 · 1 评论 -
NPOI 设置条件格式
var workbook = new HSSFWorkbook(); var worksheet = workbook.CreateSheet(); var conditionFormatting = worksheet.SheetConditionalFormatting; var rule = conditionForma...原创 2019-10-24 16:20:31 · 1901 阅读 · 0 评论 -
C# 不同方式启动多线程执行同一个耗时方法多次,耗时情况比较(不考虑内存占用)
在C#中我们,我们经常使用多线程,据我自己所了解到的启动多线程有以下几种方式:1,Thread,2,ThreadPool,3,Task,4,Parallel.For,5,Parallel.Foreach后面两种,可能是多线程,可能不是,看注释就可以看的到:Parallel.For的注释:Parallel.Foreach的注释:暂且也当作是多线程的一种。据我直观理解:1.Th...原创 2019-10-11 19:38:48 · 5492 阅读 · 0 评论 -
C#中的绝对路径和相对路径的求法
最近被绝对路劲和相对路径的问题困扰,谈一谈我的解决方法。 平时我们在xml中配置一个路劲的时候,有时候写相对路径比较方便,因为这样移植到其他电脑之后,就无需做任何更改,但是在xml中写的相对路径有时候会是IIS的路径,比如我们配置的Webservice服务用IIS发布。 发话不多说,上例子: 列子1:string p1 = @"C:\A\B\C\D\E\F\G\H\";string p2 =原创 2016-12-15 22:36:44 · 9914 阅读 · 1 评论 -
C# 实现一个对象的深复制的方法
/// <summary>/// 使用序列化的方法实现深复制/// </summary>/// <typeparam name="T"></typeparam>/// <param name="source"></param>/// <param name="desti原创 2019-01-08 17:20:37 · 9642 阅读 · 0 评论 -
c# 值类型和引用类型的内存存储方式
https://www.cnblogs.com/xiaodongy/p/7989711.html转载 2019-10-05 10:39:25 · 545 阅读 · 0 评论 -
C# NPOI拓展
/// <summary> /// li NPOI的拓展方法,不用使用之前要先创建行和列 /// </summary> public static class NPOIExtensions { #region Worksheet工作簿拓展 public static IRow GetRowEx(this ISh...原创 2019-07-11 17:18:26 · 251 阅读 · 0 评论 -
C#+NLua实现将Lua代码在主线程上执行
本文示例下载 1.C#与Lua的交互请参考我以前的文章Lua结合C#调用C++或者C的函数 2.在C#中,如何将一片代码片段放在主线程执行呢?对于Winform程序: public void ExecuteMethodInMainThread() { if (this.InvokeRequired) {原创 2017-10-18 18:39:04 · 3986 阅读 · 0 评论 -
C# TCP异步通讯框架封装
最近用c#写了一个TCP异步通讯框架TCPHelper,用于服务端客户端通讯,采用异步和事件驱动的方式,使用者只需要初始化和装载事件即可使用,框架图粗略如下所示: 使用如下:(本文框架及实例下载地址) 服务端using System;using System.Collections.Generic;using System.Linq;using System.Text;using S原创 2017-09-28 10:54:36 · 9726 阅读 · 2 评论 -
Lua结合C#调用C++或者C的函数
本文所用到的知识点: 1.Lua与C#交互,参考这里 2.C#调用非托管DLL的方法(dllImport或者kernel32.dll中的LoadLibrary) 3.C# 反射动态生成方法并调用。 最终想达到的效果是:在Lua中能直接填写Dll中的函数,并传递参数调用。一、Lua与C#交互: 在上面的链接中,将NLua下载下来。NLua是C#和Lua交互的桥梁。有两种方式: a.C#+N原创 2017-09-09 18:18:00 · 1809 阅读 · 0 评论 -
C# Distinct将对象按条件去重
平时,我们将c#中的Distinct大多用于对数组去重,一般数组为基础的数据类型,例如 int,string.也可以用于对象去重,我们看看C#对Distinct方法的定义: 有重载,第一个参数都加了this,是拓展方法,有关拓展方法,请百度了解。 下面我们来研究下Distinct的对象去重,假设我们现在有一个People类: public class People {原创 2017-07-25 19:39:40 · 29767 阅读 · 16 评论 -
WPF实现Android或IOS的Tab控件效果
在手机上,我们看到干净整洁的TabControl,如下图所示: QQ的TabControl界面: 网易云的TabControl界面: 最后我用WPF实现的TabControl: 虽然虽然丑了一大节,但是但是至少也做到了外观相似啊,颜色、字体、宽度都可以自定义。 做这个控件的思路如下: 1.从Blend中找到TabControl和TabItem的XAML模版 2.原创 2017-06-13 21:45:50 · 2433 阅读 · 0 评论 -
WPF 音乐播放器
自己写的WPF音乐播放器,可以播放歌词,界面如下: 播放时,显示歌词界面如下: 添加歌曲到歌曲列表可以在\bin\debug\Music文件夹下直接把歌曲拖进去,这个歌曲文件夹也可以在config配置文件中更改:<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <supported原创 2017-03-28 19:01:50 · 1805 阅读 · 0 评论 -
WPF程序启动加载splash screen等待的方法
最近做项目,点开WPF程序,界面半天不打开,要过一会界面才出来,于是想到给它做一个splash window. 最开始想到的方法是:程序启动的时候,new 一个窗口(带有动画的等待),调用Show方法不阻塞后面的进行来显示。如下所示:namespace WPF_SplashTest{ /// <summary> /// Interaction logic for App.xaml原创 2017-03-30 21:53:01 · 13352 阅读 · 14 评论 -
C# Lock
1.在不同的代码片段使用同一个锁,这两个代码片段只能被获得锁的线程访问,其他线程不能访问。namespace 同一个锁测试{ class Program { private static object obj1 = new object(); public static int count = 0; static void Main(原创 2017-04-09 12:18:02 · 2753 阅读 · 0 评论 -
C# 序列化
本文示例完整代码 最近在操作Xml用常规的方法比较繁琐,用LinQ to xml比较简单,但我想说的是另外一种方法:自定义序列化 平时程序在操作将数据存入xml中,无非就是将复杂对象的属性保存到xml中,然后在有需要的时候再加载。使用xml序列化要using System.Xml.Serialization;请看如下: 1.普通对象的序列化using System;using System.原创 2016-12-29 01:06:47 · 391 阅读 · 0 评论 -
Smart Thread Pool
线程池转载 2018-07-25 19:13:53 · 232 阅读 · 0 评论 -
C# DataTable按列过滤通用函数
static List<T> Filter<T>(List<T> source, string expresion) where T:class,new() { var propertys = typeof(T).GetProperties(); var resultList = new List&...原创 2018-08-29 11:12:08 · 1737 阅读 · 0 评论 -
C# 使用代码实现非托管dll、OCX动态注册
一般我们注册VB的ocx控件或者其他的dll需要手动在控制台命令中用regsvr32来注册,其实就是调用dll中的DllRegisterServer方法,用c#的DllImport也可以调用该方法,但是DllImport的路径必须是静态字段,不能动态的,我们可以使用kernel32中的两个函数来实现动态调用:LoadLibrary和GetProcAddress,调用完成之后再FreeLibrary...原创 2018-09-16 11:36:11 · 2005 阅读 · 0 评论 -
C# OCR识别
C# 识别文字我试验过的有两种,1.使用开源库tesseract,地址:https://github.com/tesseract-ocr/tesseracttesseract训练的语言包:https://github.com/tesseract-ocr/tessdata有专门针对C#的封装:https://github.com/charlesw/tesseractC# Demo地址:htt...原创 2019-06-12 23:19:30 · 18349 阅读 · 15 评论 -
任意C#的DLL不用注册实现被VB6调用
VB6与C#之间的交互,据我所知,有以下几种方式:1.socket通讯方式,VB6有Winsocket控件,C#有专门的位于System.Net.Sockets下的通讯类2.共享内存,共享内存C#有专门的封装类,详情见我的这篇博客,但是VB操作共享内存麻烦,要调用Windows API(Kernel32.dll中的函数)3.读写文件/数据库的方式。这种方式无非是轮询,一个程序写请求,另一个...原创 2019-05-22 22:35:48 · 3999 阅读 · 0 评论