• 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)去掉勾选 


  • 相关阅读:
    Android自动填写获取到的验证码
    java 调用mysql存储过程
    TreeMap按照key排序
    Java中的Map List Set等集合类
    Java 多线程 并发编程
    Linux查看端口、进程情况及kill进程
    采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!)
    Wix 安装部署教程(十) --来,用WPF做个漂亮的安装界面
    Jquery Mobile 小结
    岂能尽如人意,但求无愧于心
  • 原文地址:https://www.cnblogs.com/Feng-Scorpio/p/8309977.html
Copyright © 2020-2023  润新知