• 近期总结


    1. 线程同步:
    private
     static readonly ManualResetEvent Event = new ManualResetEvent(false);
    in the thread:
    {
      xxx
      if (Interlocked.Decrement(ref _load) == 0)
           Event.Set();
      xxx
    }

    in the main thread:
    {
     for (int i = 0; i < _load; ++i)
      {
          ThreadPool.QueueUserWorkItem(ExecuteHiveJob)
      }   Event.WaitOne();
    }

    2. C#邮件类
         private static string _userMailUser = "user@domain.com";
            private static string _userMailPassword = "xxxxxxx";
            private static string _from = "user@domain.com";
            private static string _to = "user@domain.com";
            private static string _subject = "xxxx";
            private static string _body = "xxxx";
            private static string _smtpServer = "smtp.gmail.com"; // gmail smtp server
            private static int _smtpPort = 587;
         static void Main(string[] args)
            {
                var client = new SmtpClient();
                client.Port = _smtpPort;
                client.Host = _smtpServer;
                client.EnableSsl = true;
                client.Timeout = 10000;
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.UseDefaultCredentials = false;
                client.Credentials = new System.Net.NetworkCredential(_userMailUser, _userMailPassword);
     
                var mm = new MailMessage(_from, _to, _subject, _body);
                mm.BodyEncoding = UTF8Encoding.UTF8;
                mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
     
                client.Send(mm);
            }
    
    
    3. C#异步线程调用

        
         public Task<MobileServiceCollection<T, T>> QueryRecords()
            {   
                return todoTable.ToCollectionAsync(); // 异步方法
            }

        
          // 在调用方法内,如click方法中
        
    itemsProfile = await clientProfileTable.QueryRecords(); // 使用await关键字,程序执行到这里时,会直接跳过去(返回界面),待真正查询成功后,继续执行这条语句后面的语句,很适合View Model模式的应用。
         // do something
        

    在调用过程中,也可以捕捉异常,不过需要等过一段时间才能捕捉到异常,因此,必须加await等等异常抛出并捕捉。
                try
                {
                    await BuildProfile(UserProfiles.UserName);
                }
                catch (Exception e)
                { 
                }
     







  • 相关阅读:
    ComboBox联动DataGridview之Access表名联动表内容
    通过进程ID获取窗口句柄(微软)
    Excel操作类
    C# TextBox自动完成
    Mdi悬浮子窗体不超过主窗体边界
    Excel导入数据库_Excel2Sql
    C#连接SQL的增删改查
    用dynamic expression运行时访问dynamic object
    添加模式匹配
    对帐脚本语言的修改
  • 原文地址:https://www.cnblogs.com/codefinder/p/3673270.html
Copyright © 2020-2023  润新知