C# 笔记
未处理SQLite.Net.SQLiteException
HResult=-2146233088
Message=database is locked
Source=SQLite.Net.Platform.Win32
SQLite只支持库级锁,库级锁意味着什么?——意味着同时只能允许一个写操作,也就是说,即事务T1在A表插入一条数据,事务T2在B表中插入一条数据,这两个操作不能同时进行,即使你的机器有100个CPU,也无法同时进行,而只能顺序进行。表级都不能并行,更别说元组级了——这就是库级锁。但是,SQLite尽量延迟申请X锁,直到数据块真正写盘时才申请X锁,这是非常巧妙而有效的。
引自https://www.cnblogs.com/xienb/p/3455562.html
目前用的是ReaderWriterLockSlim来控制
Thread的使用方法:
new Thread(o => { //方法体 }).Start(); new Thread(o => { for (int i = 0; i < 100; i++) { Log.write(Log.type.test, this.GetType().Name, 650, "Buy => " + i.ToString()); Thread.Sleep(1); } }).Start();
异步多委托处理
delegate string MyDelegate(object model); ..... void method (){ //建立委托 MyDelegate ADelegate = new MyDelegate(DelegateMethod1); MyDelegate BDelegate = new MyDelegate(DelegateMethod2); //异步调用委托,获取计算结果 IAsyncResult AResult = mybuyDelegate.BeginInvoke(para1, null, null); IAsyncResult BResult = mysellDelegate.BeginInvoke(para2, null, null); //此处可加入多个检测对象 WaitHandle[] waitHandleList = new WaitHandle[] { AResult.AsyncWaitHandle, BResult.AsyncWaitHandle }; WaitHandle.WaitAll(waitHandleList); //返回数据 string AData = mybuyDelegate.EndInvoke(AResult); string BData = mysellDelegate.EndInvoke(BResult); } .... string DelegateMethod1(object model){ .... return data; }
WinForm 控件数据加载,优化处理
void BuildTableDetail(List<object> source) { this.dgv_Detail.Rows.Clear(); this.dgv_Detail.Invoke((MethodInvoker)delegate () { //处理 }); }
C# JSON 字符串格式化
Newtonsoft.Json,这里使用的版本是4.5
private string ConvertJsonString(string str) { //格式化json字符串 JsonSerializer serializer = new JsonSerializer(); TextReader tr = new StringReader(str); JsonTextReader jtr = new JsonTextReader(tr); object obj = serializer.Deserialize(jtr); if (obj != null) { StringWriter textWriter = new StringWriter(); JsonTextWriter jsonWriter = new JsonTextWriter(textWriter) { Formatting = Formatting.Indented, Indentation = 4, IndentChar = ' ' }; serializer.Serialize(jsonWriter, obj); return textWriter.ToString(); } else { return str; } }
原文链接https://www.cnblogs.com/unintersky/p/3884712.html
未处理System.ArgumentException
HResult=-2147024809
Message=不能清除此列表。
Source=System.Data
DataTable dt = (DataTable)tb_buy.DataSource;
dt.Rows.Clear();
tb_buy.DataSource = dt;
http://blog.sina.com.cn/s/blog_5420e00001015gty.html
one = SOURCE1.FindAll(x => x.name == data).ToList(); LIST2 = SOURCE2.FindAll(delegate (model one) { return one.name == data });
的区别
Log4net的配置步骤
1.引入log4net.dll
VS开发工具的建议使用NuGet包管理器
2.添加配置文件 "xxxxx.config",添加后,右键->属性->[复制到输出目录:始终复制] ps:要是缺少这一步,呵呵....!@#$^%&^%^%$
3.在项目/Properties/AssemblyInfo.cs 中增加条目
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xxxxx.config", ConfigFileExtension = "config", Watch = true)]
4.新增Log记录类文件阿斯顿发
public static readonly log4net.ILog logdebug = log4net.LogManager.GetLogger("logdebug"); public static void write(type type, string filename, int line, string description) { if (logdebug.IsDebugEnabled) { logdebug.Debug(string.Format("模块:{0} 文件:{1} 行号:{2} 描述:{3}", type.ToString(), filename, line, description)); } }
-------------------------------------------------------------------到此配置结束-----------------------------------------------------------------------------
/**********************************************以下是配置文件config的说明(与以上面的第4步骤有关联)*******************************************/
主要分2个部分
第一部分是记录器的名称在log类中的 log4net.LogManager.GetLogger("logdebug"); 也正是用的此name
第二部分是记录器的配置部分,存放到哪儿,日志文件怎么个命名法,日志文件怎么个分类.....
当初配置的时候想让文件根据大小分割日志的,但是一直不行,在此记录下错误的配置
错误的配置
会出现文件不以大小分割一直增加文件的情况
正确的配置:
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0"/> </configSections> <log4net> <logger name="logerror"> <level value="ALL" /> <appender-ref ref="ErrorAppender" /> </logger> <logger name="loginfo"> <level value="ALL" /> <appender-ref ref="InfoAppender" /> </logger> <logger name="logdebug"> <level value="ALL" /> <appender-ref ref="DebugAppender" /> </logger> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\Error\\error_"/> <param name="AppendToFile" value="true"/> <param name="RollingStyle" value="Composite"/> <param name="DatePattern" value="yyyy-MM-dd".log""/> <param name="StaticLogFileName" value="false"/> <param name="MaximumFileSize" value="10240KB"/> <param name="CountDirection" value="1"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=Red>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\Info\\info_"/> <param name="AppendToFile" value="true"/> <param name="RollingStyle" value="Composite"/> <param name="DatePattern" value="yyyy-MM-dd".log""/> <param name="StaticLogFileName" value="false"/> <param name="MaximumFileSize" value="10240KB"/> <param name="CountDirection" value="1"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=Blue>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"> <!--文件路径,如果RollingStyle为Composite或Date,则这里设置为目录,文件名在DatePattern里设置,其他则这里要有文件名。已经扩展支持虚拟目录--> <param name="File" value="Log\\Debug\\debug_"/> <!--True/false,默认为true。当文件存在时,是否在原文件上追加内容。--> <param name="AppendToFile" value="true"/> <!--创建新文件的方式,可选为Size(按文件大小),Date(按日期),Once(每启动一次创建一个文件),Composite(按日期及文件大小),默认为Composite--> <param name="RollingStyle" value="Composite"/> <!--当RollingStyle为Composite或Date,这里设置文件名格式--> <param name="DatePattern" value="yyyy-MM-dd".log""/> <!--True/false,默认为true。为true时,RollingStyler的date值将无效。且为true时,需要在file里指定文件名,所有日志都会记录在这个文件里。--> <param name="StaticLogFileName" value="false"/> <!-- 每个文件的大小 --> <param name="MaximumFileSize" value="10240KB"/> <!-- 切割最多文件数 --> <!--<param name="MaxSizeRollBackups" value="100"/>--> <!--默认值为-1。当文件超过MaximumFileSize的大小时,如果要创建新的文件来存储日志,会根据CountDirection的值来重命名文件。大于-1的值时,file里指定的文件名会依次加上.0,.1,.2递增。当等于或小于-1时,创建依赖于MaxSizeRollBackups参数值,创建备份日志数--> <param name="CountDirection" value="1"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=Orange>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> </log4net> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>
致谢此文http://blog.csdn.net/hr541659660/article/details/45575473
WinForm TabControl 选项卡 右置
属性设置:
里面内容用Panel盛装
1.Panel 盛装 控件
2.TabControl 调整属性
3.放置Panel
无法启用程序 "http://localhost:xxxxxx" 操作在当前状态中是非法的
>> 工具--选项--调试--常规--启用asp.net的JavaScript调试(chrome和ie)去掉勾选