C#
小盼你最萌哒
这个作者很懒,什么都没留下…
展开
-
C# 多线程FileStream读写锁
有时候某些线程读配置,很简单的用FileStream file = new FileStream("1.txt", FileMode.Open);就打开文件了,然后开始读了。而习惯了直接单开一个线程去读文件这种情况,很容易就遇到了文件正在读的时候,然后就冲突了……下面写了一个简单的读写过程: static void ReadFunction() { ...原创 2019-07-23 14:20:51 · 2251 阅读 · 0 评论 -
C# DynamicJson插件使用
当需要保存一个对象的内容到数据库的时候,一般习惯用json把对象序列化一个字符串进行存储。当需要时取出来就行了。DynamicJson下载地址DynamicJson是一个动态Json的库,下载地址也附带了使用Demo,可以很方便的把一个变量进行序列化。先引入dll文件,再添加命名空间using Codeplex.Data;可以发现其解析过程,实质是把对象先转成xml格式进行临时存储,再利...原创 2019-06-24 15:55:48 · 1205 阅读 · 0 评论 -
C# 第一个UDP通信程序
准备学习下UDP视频传输,这里拿网络调试助手测试了下UDP的数据接收。网络调试助手有区分client和server:这里测试了下,server只会给最新的client 发数据。个人理解其实udp协议和tcp相比,区别就是:发送:你只管把数据往某个ip的某个port发,也不管对方有没有listen,反正调用sendto丢出去就是了。接收:监听网卡(可以多张)的指定port,接收到数据的时...原创 2019-06-21 21:58:02 · 978 阅读 · 0 评论 -
C# System.Speech语音播报朗读字符串
先在引用里添加 System.Speech。添加using语句using System.Speech.Synthesis;然后就是主程序了。 /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window...原创 2019-03-31 10:54:44 · 5827 阅读 · 8 评论 -
WPF样式使用
当页面中有多个元素的时候,可以通过样式来批量对参数赋值。<Window x:Class="Effluent.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006...原创 2019-03-03 20:05:35 · 280 阅读 · 0 评论 -
WPF中 x:Name和Name的区别
x:Name 唯一地标识 XAML 定义的对象,以便于从代码隐藏或通用代码中访问对象图中实例化的对象。x:Name 一旦应用于支持编程模型,便可被视为与由构造函数返回的用于保存对象引用或实例的变量等效。x:Name 用来在XAML中表示一个指定对象的名称;可以通过他来访问XAML对应隐藏代码所关联的对象。Name 许多框架的类中都有Name这个属性,而在WPF中,x:Name和Name是可以互...转载 2019-03-03 17:26:58 · 6054 阅读 · 1 评论 -
FAT32单文件夹最大能放多少个文件
最近因为要用单片机做数据存储与查询,类似于数据库,后面还需要把这些数据导出到电脑。就想着用一个txt文件存一个数据,文件命名就是对应的唯一编号。https://feiyan35488.iteye.com/blog/953672上帖说:昨天在项目中遇到一个问题,这是在对网站静态化时出的问题,系统报了 File not found , 上层error 是, file or directory...原创 2019-03-08 17:17:47 · 6130 阅读 · 0 评论 -
WPF组合Path绘制
假设我们需要绘制如图的组合图形:一般的解决方案是如下代码,创建一个Canvas包含这三部分,如左图所示。&amp;lt;Canvas Margin=&quot;508,604,-508,-604&quot;&amp;gt; &amp;lt;Canvas.RenderTransform&amp;gt; &amp;lt;Trans原创 2019-02-27 11:15:37 · 3792 阅读 · 0 评论 -
C#构造函数静态构造函数的区别
构造函数和静态构造函数在一个类中是可以共存的。静态构造函数的执行在构造函数之前,当类第一次被Code用到的时候执行,而构造函数一定是要实例化对象的时候才执行。测试代码:using System;namespace ConsoleApplication1{ class A { public A() { Console...原创 2019-03-03 15:33:05 · 1033 阅读 · 0 评论 -
WPF应用显示在第二屏幕上
有时候希望代码在副屏上显示调试,只需要在窗口的构造函数中添加如下代码即可。 public MainWindow() { InitializeComponent(); Screen[] _screens = Screen.AllScreens; Screen s = Screen.AllScreens[1];...原创 2019-03-03 15:27:40 · 3236 阅读 · 0 评论 -
WPF容器控件类介绍
WPF容器控件类介绍https://blog.csdn.net/wushang923/article/details/6564641转载 2019-03-01 21:18:25 · 437 阅读 · 0 评论 -
WPF利用Canvas实现任意分辨率的全屏缩放
再界面绘制的时候,可以通过Canvas实现内容缩放,以此也可以用来实现分辨率的自适应。假设我们的界面是这样的:其实也就是随便画的一个曲线,代码在下面:&lt;Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ...原创 2019-03-01 21:13:55 · 5480 阅读 · 0 评论 -
C# 使用MemeryStream进行序列化
微软文档中有写如何使用文件流FileStream对类进行序列化Serialize和反序列化Deserialize。参考:基本序列化[Serializable] public class MyObject { public int n1 = 0; public int n2 = 0; public String str = null; }序列化过程:MyOb...原创 2019-07-04 16:22:50 · 986 阅读 · 0 评论 -
使用tcpClient类创建tcp连接
C# 有封装好的TcpClient类,结合NetworkStream 类可以方便快速的建立TCP连接。 TcpClient tcpClient = new TcpClient("10.10.6.168", 8000); NetworkStream stream = tcpClient.GetStream(); byte[] b...原创 2019-07-04 18:45:13 · 2150 阅读 · 3 评论 -
WPF中MainWindow、Window_Loaded、Window_Initialized的执行顺序
由于编写的WPF程序中,在程序启动时需要对用户控件进行刷新一次,就写在了Window_Loaded函数中,但是发现对界面改变并没有什么效果,于是开始debug…… public MainWindow() { InitializeComponent(); //...... Console.WriteL...原创 2019-07-17 21:15:50 · 7084 阅读 · 1 评论 -
C# Object与Xml字符串经MemeryStream互转
通过xml文件保存对象,保存中的枚举内容为枚举变量符号,而不是真实值,方便阅读。 public enum SexType { Male = 1, Female = 2 } public class Person { public int Age { get; set; } public string...原创 2019-07-19 21:46:24 · 598 阅读 · 0 评论 -
C# XmlDocument.Save文件操作System.IO.IOException:The process cannot access the file because it is being
实测,在文件进行读写的时候,使用xmlDocument.Save("1.txt");进行文件保存时,会出现以下异常。System.IO.IOException:“The process cannot access the file 'C:\Users\Shine\Desktop\ConsoleApp2\ConsoleApp2\bin\Debug\netcoreapp2.1\1.txt' bec...原创 2019-07-23 15:54:27 · 4276 阅读 · 1 评论 -
C# 静态类中静态方法的局部变量和静态成员的区别
首先,静态类不能有非静态成员和函数,即所有函数和变量都只能有一个,不能被实例化。我们可以做一个静态类,用于存储设置信息、定义一些与变量无关的公共方法。我们知道静态成员变量是共享的,那静态函数中的临时变量是不是也是共享的呢?做一个简单的测试:using System;using System.Threading;namespace ConsoleApp2{ static c...原创 2019-07-16 14:15:25 · 1218 阅读 · 0 评论 -
C# Override与Virtual的使用
在实际运用中,有很多对象具有很多相同属性,但是有些属性是不同的,直接copy重新写一个类的话,如果统一需要修改,那么每个对象都需要改,就出现了继承。通过Virtual和Override关键字,可以做出区别。下面一个例子,假设Father拥有变年轻的能力,重回30岁的巅峰。 class Father { //public int Age { get; set; } ...原创 2019-07-18 16:05:08 · 742 阅读 · 0 评论 -
C# 简单登录验证跳转到主界面
先拖一个简单的登录界面。核心界面代码如下: <Grid> <Button Content="管理员登录" IsDefault="True" HorizontalAlignment="Left" Margin="168,176,0,0" VerticalAlignment="Top" Width="72" Click="But...原创 2019-07-15 20:52:27 · 1840 阅读 · 0 评论 -
C# 自定义倒计时MessageBox
首先需要设计一个简单的界面,一个label和button,如图所示。UI核心代码如下: <Grid> <Label x:Name="lb_content" Content="Label" HorizontalAlignment="Left" Margin="76,68,0,0" VerticalAlignment="Top" Height="126" W...原创 2019-07-15 20:44:48 · 1663 阅读 · 0 评论 -
C# TraceListener做Debug
在debug程序的时候,有时候想在运行结束过程后,一览运行过程中的数据,虽然可以打断点查看,但是个人感觉步骤太麻烦,不如打印到文件里来的方便。TraceListener具有很多功能,最简单的就是打印输出了。 /// <summary> /// 用于调试输出文件 /// </summary> class CDebug : TraceListener...原创 2019-07-15 16:42:43 · 313 阅读 · 0 评论 -
C# xml序列化
开始享用二进制序列化打包通信,发现因为程序集不一样报错,这就很难受了。于是开始尝试用xml序列化,数据接收成功。 /// <summary> /// 发送数据包 /// </summary> /// <param name="package"></param> pub...原创 2019-07-05 16:00:35 · 215 阅读 · 0 评论 -
c# 帧解码(未完成)
在dsp学习过程中,dsp使用UDP协议把图像帧通过xvid编码发送到PC机,虽然有基于MFC开发的上位机可以使用,但是还是想自己写一个,就开始作死……既然下位机有enc_main,那么PC端肯定有对应的dec_main,找了找好像都是基于cpp的,而且因为版权问题还只给了源码,要自己编译生成.lib和.h文件,感觉过程有点复杂而且知道怎么把cpp的指针完美的转移到c#里,放弃了~然后想的既然...原创 2019-06-30 12:00:39 · 399 阅读 · 0 评论 -
C# static Thread的new操作
虽然static关键字使得只有一个Thread句柄,但每次new操作都会创建一个线程。并不能保证只创建一个线程。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace ConsoleApp1{ clas...原创 2019-07-05 11:45:18 · 812 阅读 · 0 评论 -
WPF 图片点击后修改图片
先在wpf中添加一个图片,设置好Source并添加鼠标点击事件MouseDown="Image_MouseDown"。&lt;Image HorizontalAlignment="Left" Height="132" Margin="106,161,0,0" VerticalAlignment="Top" Wi原创 2019-02-20 15:21:17 · 1952 阅读 · 0 评论 -
C# MessgeBox是否取消响应
MessageBoxResult result = MessageBox.Show("Are you love me?", "title", MessageBoxButton.YesNoCancel); if(result==MessageBoxResult.Yes) { } ...原创 2019-02-20 15:14:47 · 242 阅读 · 0 评论 -
C# 代理delegate简单理解
c#中有个很重要的东西,叫C委托,博主是从玩单片机过来的,那些class还好,这个delegate是真的一脸懵逼,看了看网上各位大佬长篇的描写,写点自己的理解。假设有一个工人的类: class Worker { public string name; public int money; public Worker(string name,...原创 2019-02-18 20:50:43 · 370 阅读 · 0 评论 -
C#解析json字符串处理
c#解析json字符串处理(最清晰易懂的方法)原创 2019-02-18 14:43:42 · 469 阅读 · 0 评论 -
WPF中Image图片Tag标签使用
html中有id、name、class对元素进行标识。id 是这个标签在页面上唯一的一个标识;name同样也是标识,但可以有多个对象都为name,比如单选按钮(一般表单提交后,要通过name的值来获取对应的值)class是表示当前标签应用的样式名字而在wpf中,只有id和name两个属性,id是唯一表示,name是自定义标识,但name并不能相同。如果需要对元素进行任意分类划分,WP...原创 2019-02-23 10:52:22 · 2292 阅读 · 0 评论 -
WPF实现填充动画
LinearGradientBrush 画刷可以实现不同颜色对Path的填充,选用LinearGradientBrush 画刷,设置运行方向起点为左上角,终点为左下角,其实就是从上往下填充,需要其他方向可以改这两个Point的值。0.01*i为分解比例点,上面为红色,下面为绿色,这样就可以实现一个Path被两种颜色填充。 public void Update(System.Windows.S...原创 2019-02-22 21:03:06 · 818 阅读 · 0 评论 -
WPF退出程序
当处于全屏模式下时,没有右上角的退出按钮,此时需要手动写button退出功能。调用下面语句可以直接退出。Application.Current.Shutdown();原创 2019-02-22 20:56:01 · 2439 阅读 · 0 评论 -
C#文件读写
using System;using System.IO;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { FileStream fs = null; ...原创 2019-02-17 21:03:15 · 1503 阅读 · 0 评论 -
WPF设置全屏
首先在xaml文件中的Window标签中,添加Loaded属性Loaded="Window_Loaded",即窗口加载时执行Window_Loaded函数。此时在对应的cs文件中就有了 private void Window_Loaded(object sender, RoutedEventArgs e)函数,添加如下代码: private void Window_Loaded...原创 2019-02-22 10:26:13 · 8482 阅读 · 0 评论 -
WPF画圆弧
WPF中可以通过Path绘制椭圆弧线。 <Canvas Margin="100,100,0,0"> <!--颜色 线粗 整个路径的最大显示宽度 整个路径的最大显示高度 轮廓间隔 轮廓形状 相对Canvas左边界的距离 相对Canvas上边界的距离--> <Path Stroke="Green" StrokeThickness="1...原创 2019-02-22 10:14:42 · 9052 阅读 · 5 评论 -
C#截取指定子字符串
在TCP通信中,数据是一直在发的,为了保证我们需要的命令包是完整的,那么一定会有命令头和尾,然后再截取中心的命令数据处理,留下剩下的字符串。 string s="qwer[asdf]zxcv"; int startOps = s.IndexOf("["); Console.WriteLine(startOps); in...原创 2019-02-16 11:42:54 · 2243 阅读 · 0 评论 -
C# 用list<byte> 实现类似byte数组追加
因为c#中的byte数组长度是固定的,并没有提供类似于strcat这类的方法,利用list&lt; byte &gt; 可以实现类似作用。 static void Main(string[] args) { List&lt;byte&gt; listData = new List&lt;byte&gt;(); byte...原创 2019-02-16 11:29:13 · 8251 阅读 · 0 评论 -
C#中//注释和///注释的区别
///会被编译,//不会所以使用///会减慢编译的速度(但不会影响执行速度)///会在其它的人调用你的代码时提供智能感知也是一种注释,但是这种注释主要有两种作用:1.这些注释能够生成一个XML文件。这样呢,看起来会对程序的内容一目了然。2.以这种方式对你的类,属性,方法等等加上注释之后,当你在其他地方使用以这种方式加上的类,属性,方法等等地时候,黄色的提示框里面会把你写的注释显示出来,...转载 2019-02-14 17:00:23 · 2491 阅读 · 0 评论 -
C#中线程的建立、挂起、继续与销毁
在c#中,对于不需要考虑严格时序的任务,线程是一个很方便的东西。将没一个单独需要执行的事情都作为一个线程,在主函数中调用就可以了。新建一个项目之后,需要引入线程相关的命名空间,里面包含了线程相关class的定义、功能函数等内容。using System.Threading;先定义一个thread类型的变量,其中th是该线程的名字,如果需要对该线程进行操作,就是对变量th的操作;Threa...原创 2019-02-13 13:44:38 · 22731 阅读 · 3 评论 -
C#线程单参数的传递
一般每个线程都具有固定的任务。有时候在一个系统中,多个任务只有一点点的区别,比如任务1每秒打印一句“hello tom”,任务2每秒打印一个“hello jerry”,这种情况下完全没有必要写两个static函数(占用内存),而且如果以后还有cherry、nancy等人的问候语,这个时候就需要用到函数参数传递了。csharp中的直接参数传递实际很容易,但是只能传递一个参数。先定一个线程函数:...原创 2019-02-13 14:14:14 · 2889 阅读 · 0 评论