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&quot;.log&quot;"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="MaximumFileSize" value="10240KB"/>
      <param name="CountDirection" value="1"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="&lt;HR COLOR=Red&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
      </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&quot;.log&quot;"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="MaximumFileSize" value="10240KB"/>
      <param name="CountDirection" value="1"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="&lt;HR COLOR=Blue&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
      </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&quot;.log&quot;"/>
      <!--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="&lt;HR COLOR=Orange&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
      </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)去掉勾选 


 

posted @ 2018-01-18 14:16  天蝎座  阅读(363)  评论(0编辑  收藏  举报