基础知识
文章平均质量分 72
基础知识
故里2130
共同学习交流,包括C#,uniapp,H5,vue3,小程序,网站,客户端,数据库,后台接口等等,以及疑难的软件问题。
展开
-
Task中Wait()和Result造成死锁
在使用Task的时候,一不留神就会造成死锁,而且难以发现,尤其是业务繁多的情况下,一个Task嵌套另一个Task的时候,下面就演示一下,在什么情况下,会产生Wait()和Result的死锁,因此,我们就要避免这样的写法。原创 2023-12-03 17:45:12 · 2061 阅读 · 0 评论 -
c#使用ThreadPool
说到ThreadPool,都知道是线程池。从时间上来排序,大概是这样的,Thread,backgroundworker,ThreadPool,Parallel,Task。其中后面2种是最新的,之前的很少使用,如果是老项目,基本上前面用的多,而新项目,最好使用后面的2种,因为后面的效率以及各方面控制更加的容易上手,需要开发者考虑的问题,也更加的少,使用起来简单方便。1.其中WaitCallback是一个带有参数的方法,所以上面案例,需要传递一个object对象,可见,属于多次一举,但是规定就是这样的。原创 2023-07-16 17:41:20 · 1041 阅读 · 0 评论 -
C#之反射
说明白一点,就是可以访问和使用一个dll里面所有的东西,并且是运行动态时的调用,而不是普通编译时的绑定,这样使程序更加的自由和灵活,但是性能较低。Assembly.LoadFrom,不仅加载自己,还加载依赖项,除过自己,还加载自己关联其他的dll。Assembly.LoadFile,只加载自己,不加载依赖项,意思就是除过自己,不加载关联的dll。1.建立2个项目,第一个输出类库,第二个输出控制台程序,然后使用反射的方式调用。大部分的内容都在type点里面,里面包含了所有的对象,比如字段,属性,方法等等。原创 2022-09-20 16:01:49 · 861 阅读 · 0 评论 -
C#泛型委托
这个比较简单,从delegate关键字到匿名委托方法,再到Action和Func,Action是无返回值的委托,Func是有返回值的委托,现在基本上都是基于Action和Func来写委托的,有些和业务逻辑连接起来写匿名委托方法。从中我们可以看到where和自定义的NewWhere,功能是一样的,也就是说where也是用了泛型委托。所以,我们可以传递一个类型的数据进去,然后再传递一个方法进去,自动就加工返回值了。可以看到都是where的功劳,现在我们可以使用泛型委托自己自定义一个和where一样的功能。...原创 2022-08-26 15:12:52 · 2196 阅读 · 0 评论 -
c#多线程同步执行
在C()方法中,其实是遇到await后,代码则是返回task.run上面去了,然后从上到下再执行,执行到第二方法,又返回task.run上面去了,然后再从上到下执行,以此类推,所以和同步执行的时间基本上一样的。多线程对于单线程来说的,单线程,就是开启一个线程进行工作,多线程则是,开启多个线程进行多个工作,并且没有顺序,没有规律性。多线程同步,则是,既有同步和多线程的特点,即开启多个线程进行工作的同时,还要按照顺序和规律执行。耗时5052,并且是按照顺序执行的,而且界面还可以拖动,正是我们需要的。...原创 2022-08-05 01:02:18 · 5148 阅读 · 0 评论 -
C#之泛型
泛型的用处非常大,我们编程的时候,有时候感觉不到它的存在,原因就是我们的代码过于简单,或者架构比较陈旧,所以用不用感觉不出来,一般高级框架里面就有大量的泛型。泛型的优点有:代码重用、类型安全、高效率,凡是带有的尖括号,都是泛型的表示。以下案例来自.net6环境以下3组不同类型的数据,定义的时候,我们必须知道类型,否则无法定义,而且后期不能再次增加或者减少数据于是,后来有了ArrayList,不需要知道类型,ArrayList中的Add方法可以增加任何类型的数据,但是有装箱拆箱的性能损失。再后..原创 2022-06-20 00:42:53 · 591 阅读 · 0 评论 -
Linq和Lambda学习
Linq:在数据库中,可以使用sql语句进行查询数据。在C#程序中,我们可以得到数据后,使用linq进行查询。包括LINQ to Objects、LINQ to SQL、LINQ to Datasets、LINQ to Entities、LINQ to Data Source、LINQ to XML/XSD等。Lambda:是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。其实有时候,Linq和Lambda是可以替换使用,有时候使用Linq简单,有时候使用Lambda简单原创 2022-05-17 16:36:49 · 1166 阅读 · 1 评论 -
C#之lock
lock语法是:private object o = new object();//创建一个对象public void Work(){ lock(o)//锁住这个对象 { //做一些必须按照顺序做的事情 }}目的是,在多线程中,使用lock后,能使该代码块按照指定的顺序执行,被lock这块代码已经被其中一个线程访问了,那么另外一个线程只能等待。理论不明白的话,看下面分解。1.看此代码,是从上面开始执行,先执行A,再执行B,这就是单线程程序,按照顺序执行的,此时结果原创 2022-05-14 15:25:43 · 30311 阅读 · 13 评论 -
c#中使用async/await
async/await需要解决的问题就是,遇到耗时的任务,后台会进行等待,不卡界面操作,不卡界面是最主要的,等后台处理完成后,结果就会在界面上出来。或者间接的带异步方法,也就是匿名方法的表示,例如Task.Run(()=>{})。1.先看界面,说一下,label3是B线程开始标记, label4是B线程结束标记。之前的线程停止,暂停,继续依然能使用。界面业务说明,label1是加法计算,分别有3个功能,对label1停止加法,暂停加法,继续加法。第二种使用了“技巧”,看起来,代码更加的清晰整洁。原创 2022-04-15 22:36:33 · 1507 阅读 · 0 评论 -
c#中使用Task
Task.Factory.StartNew比Task.Run有更多的参数选择项,偶尔也需要根据实际场景选择Task.Factory.StartNew,但是Task.Run的用法比较简介,已经可以满足大多数的场景。1.界面业务说明,label1是加法计算,分别有3个功能,对label1停止加法,暂停加法,继续加法。可以先看前面的backgroudwork文章,再看Thread文章,本demo接着Thread的环境继续。在Task中进行停止,暂停,继续的功能。并且在Task中进行停止,暂停,继续的功能。原创 2022-04-15 17:16:07 · 10821 阅读 · 9 评论 -
c#中使用Thread
这里说说Thread,之前的文章中有BackgroundWorker的用法。他们都是线程,每一个用法在不同的场景不同。1.首先看界面,启动2个线程,一个进行加法计算,一个进行减法计算。并且使界面不卡,随时可以拖动2.在load方法中新建2个线程3. 两个线程分别运行加法的方法A和减法的方法B注意:这里需要使用Invoke,否则报错下图4.效果如下using System;using System.Collections.Generic;using System.原创 2022-04-15 15:08:46 · 7744 阅读 · 1 评论 -
c#中使用BackgroundWorker
在客户端中,为了防止界面假死状态,或者不能拖动界面,可以使用BackgroundWorker。1.在界面上拖动一个BackgroundWorker,label,进度条和2个button控件。BackgroundWorker也可以选择在cs文件中new。2.bgWorker_DoWork事件中接收到bgWorker.RunWorkerAsync("11111")3.bgWorker_ProgessChanged事件中接收到bgWorker.ReportProgress方法传递过来的参数原创 2022-04-08 16:04:21 · 6134 阅读 · 0 评论 -
C#之封装
一.封装封装有5种操作第1种,建立一个Person类,纯手写代码第2种,建立一个Person类鼠标放在“sex”的末尾或者上面,右键单击,选择“快速操作和重构”这里随便选择一个“封装字段”(后面我会说区别)第3种,建立一个Person类鼠标放在“name”末尾或者上面,按ctrl+r+e然后点击应用即可第4种,建立一个Person类输入propfull后,按两下tab,然后改你需要的数据类型、变量名和属性名即可第5种,建...原创 2022-05-12 00:22:27 · 5928 阅读 · 0 评论