zoukankan      html  css  js  c++  java
  • 使用ThreadPool来实现线程的复用

    代码
    1 protected override void OnLoad(EventArgs e)
    2 {
    3 base.OnLoad(e);
    4
    5 //1.同步读取数据
    6 //GetCustomers();
    7
    8 //2.异步读取数据
    9   BackgroundWorker worker = new BackgroundWorker();
    10 //picLoading.Visible = true;
    11   IsBusy = true;
    12 worker.DoWork += (obj, arg) =>
    13 {
    14 arg.Result = GetCustomers();
    15 };
    16 worker.RunWorkerCompleted += (obj, arg) =>
    17 {
    18 BindingSource bs = new BindingSource(arg.Result, null);
    19 lstCustomers.DataSource = bs;
    20 lstCustomers.DisplayMember = "CompanyName";
    21 lstCustomers.ValueMember = "CustomerID";
    22
    23 IsBusy = false;
    24 //picLoading.Visible = false;
    25   };
    26 worker.RunWorkerAsync();
    27
    28 }
    29
    30 private bool IsBusy
    31 {
    32 set
    33 {
    34 picLoading.Visible = value;
    35 }
    36 }
    代码
    private List<CustomerInfo> GetCustomers()
    {
    List
    <CustomerInfo> result = new List<CustomerInfo>();

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
    Thread.Sleep(
    5000);
    using (SqlCommand cmd = conn.CreateCommand())
    {
    cmd.CommandText
    = "SELECT CustomerID,CompanyName FROM Customers";
    conn.Open();
    SqlDataReader reader
    = cmd.ExecuteReader();
    while (reader.Read())
    {
    result.Add(
    new CustomerInfo()
    {
    CustomerID
    = reader.GetString(0),
    CompanyName
    = reader.GetString(1)
    });
    }
    reader.Close();
    conn.Close();

    }
    }
    return result;
    }

    public class CustomerInfo
    {
    public string CustomerID { get; set; }
    public string CompanyName { get; set; }
    }

    private void lstCustomers_SelectedIndexChanged(object sender, EventArgs e)
    {
    if (lstCustomers.SelectedIndex != -1)
    {
    var customerId
    = ((CustomerInfo)lstCustomers.SelectedItem).CustomerID;
    //picLoading.Visible = true;
    IsBusy = true;
    //3.使用ThreadPool(线程池)来实现线程的复用
    ThreadPool.QueueUserWorkItem((obj) =>
    {
    var orders
    = GetOrderByCustomerID(customerId);
    this.BeginInvoke(new Action(() =>
    {
    dgvOrders.DataSource
    = orders.Tables[0];
    //picLoading.Visible = false;
    IsBusy = false;
    }));
    });
    }
    }
  • 相关阅读:
    vue-resource请求
    vue的生命周期
    Swift-多类型封装
    Swift
    Swift-structures 和 classes 初始化
    iOS-延时加载,延时初始化
    Swift-Closures
    WKWebView-填坑总结
    存档&&解档游戏状态
    循环引用 && weak strong
  • 原文地址:https://www.cnblogs.com/pfs1314/p/1771241.html
Copyright © 2011-2022 走看看