未處理SQLite.Net.SQLiteException
HResult=-2146233088
Message=database is locked
Source=SQLite.Net.Platform.Win32html
SQLite只支持庫級鎖,庫級鎖意味着什麼?——意味着同時只能容許一個寫操做,也就是說,即事務T1在A表插入一條數據,事務T2在B表中插入一條數據,這兩個操做不能同時進行,即便你的機器有100個CPU,也沒法同時進行,而只能順序進行。表級都不能並行,更別說元組級了——這就是庫級鎖。可是,SQLite儘可能延遲申請X鎖,直到數據塊真正寫盤時才申請X鎖,這是很是巧妙而有效的。chrome
引自http://www.javashuo.com/article/p-guuroinp-ma.htmljson
目前用的是ReaderWriterLockSlim來控制app
Thread的使用方法:asp.net
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 字符串格式化post
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; } }
原文連接http://www.javashuo.com/article/p-zglpgzgy-mg.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
>> 工具--選項--調試--常規--啓用asp.net的JavaScript調試(chrome和ie)去掉勾選