描述了C#中两个重要的知识点,接口和抽象类,总结了它们的优点和缺点,并且进行了对比,介绍了什么情况下用接口什么情况下用抽象类
2024-01-26 05:02:25 79KB 面向对象 接口 抽象类
1
C# 简单计时器简单计时器简单计时器简单计时器
2024-01-26 05:02:04 42KB
1
C#最新脱壳破解工具de4dot,用于看别人的封装库,反编重要工具。只需用命令行cd到De4Dot所在目录,然后执行“de4dot 您程序的名称加文件类型名” 就会在同目录下生成一个以xxx-cleaned的文件,这就是反混淆过的文件。
2024-01-26 04:06:14 1.04MB C#反编译 dll脱壳 de4dot
1
C#实现PDF生成和编辑的源码
2024-01-25 21:53:48 52.11MB C#实现PDF
1
利用AForge实现USB Camera的连接官方SDK,并且包含了AForge(含手册、源码、示例代码、引用库)所有资源,以及自己调试通过的例子。
2024-01-25 21:28:49 34.42MB USB Camera
1
我着急使用C#登录用友T6做二次开发,但是网上几乎所有的资源都不可用,用友公司也不再放出登录方法,模仿VB的几乎不可能,这是我自己做的。其中将连接数据库部分单独做了类。 方法:引用里面要加入U8LOGIN.DLL,其他的没有什么,环境是vs2017.测试环境为T6 7.0 .理论上6.0 5.0 通用,U8需要加上UFSoft.U8.Framework.Login.UI.clsLogin new = UFSoft.U8.Framework.Login.UI.clsLogin(); 演示图片见:http://www.jmysoft.com/?id=33
2024-01-25 19:44:30 75KB
1
C# GOOGLE GPS地图调用源码含完整的数据库 C# GOOGLE GPS地图调用源码含完整的数据库
2024-01-25 15:26:08 4.07MB GOOGLE GPS 源码
1
自己做的C#进销库存管理系统,可用于毕业设计,仅供大家参考
2024-01-25 15:22:01 1.67MB
1
C# 一款报价系统,可以供开发和学习,代码调试过可以直接使用,无需配置数据库,代码自带数据库。
2024-01-25 15:18:33 12.41MB
1
上传项目不支持Firefox,提示代码附件太大(1.4M),我写了30多分钟的描述全没了,太坑爹了。 10分有点贵,绝对原创,共2个代码文件300多行,下载请谨慎。你下载了,若绝对不爽在评论中说出来,不要让其他同学上当,如果觉得还可以也请留言。 代码采用多工作者多线程执行任务。通过暴露的方法往工作者传递消息,然后采用事件回调返回处理结果,实现的事件有OnThreadComplete,OnAddedTask,OnStart,OnSuccess,OnFailure,OnTimeout。 事件回调支持同步或异步,每工作者可以指定执行超时时间,避免线程阻塞死掉。队列采用线程安全的BlockingCollection,每组工作者用一个队列。委托采用Func来定义的,没有采用传统且不太好理解的Delegate。这让代码减少很多,也更容易理解。多线程应该采用消息中心来交换数据,这样就规避了线程同步交互,等待,阻塞等等,全部是异步调用,全部是接收消息工作,然后产生消息,线程间没有耦合,消息中心有很多成熟的方案如RabbitMQ, Redis(里面有简单的消息交换),微软有消息云服务等。如果应用不复杂,可以采用DB做个简单的消息中心,建议采用HTTP接口来获取与写入消息,方便将来升级重构消息中心。 开发环境VS2012,Framework4.0,代码注释量很大,如果你高兴这代码你可以随意蹂躏,如果你有建设性意见请告诉我。 下面是部分测试代码: //发送消息方法容器 var msgContainer = new Hashtable(); //创建并启动工作者 foreach (var key in workers.Keys) { //创建工作者 //启动5个线程,异步事件回调,方法执行20秒超时,程序跑起来有100个线程,由于引入超时控制,实际线程将达100+50 //下面的20个工作组,有5个是超时的,主要测试OnTimeout事件,你可以设置seleep的时间来控制 //我把sleep的时间设置的有点长,方便你测试 //测试的时候你会看见有异常,那是应为Timeout我采用的是Thread.Abort方法,这样才出发了ontimeout事件 var worker = new Sehui.Worker(5, key.ToString(), (Func)workers[key], false, new TimeSpan(0, 0, 20)); worker.OnStart += worker_OnEvent; worker.OnSuccess += worker_OnEvent; worker.OnFailure += worker_OnEvent; worker.OnTimeout += worker_OnEvent; //启动工作者 worker.Start(); //将增加消息方法放到Hashtable中 //这里我是偷懒,下面可以用循环的方式往线程中add message msgContainer.Add(key.ToString(), new Func(worker.AddTask)); } //向20个工作者发送消息,每个工作者发送20条消息 for (var i = 0; i < 20; i++) { for (var k = 0; k < 20; k++) { ((Func)msgContainer["SyncDb" + k])("[Work " + k + "] Message " + i); Console.WriteLine("send msg to worker{0},msgid:{1}", k, i); } }
2024-01-25 05:05:28 1.56MB Thread Func Delegate 异步事件
1