首页 > Windows开发 > 详细

c#界面卡死处理方法

时间:2017-09-02 20:27:37      阅读:253      评论:0      收藏:0      [点我收藏+]

方法一:

设置属性:

Control.CheckForIllegalCrossThreadCalls = false;

开启一个新线程

Thread th = new Thread(() => Search(detailID.Trim()));
th.IsBackground = true;
 th.Start();
 public void Search(string detailID)
{
dataGridView1.DataSource =BLLBillConsume.BllGetClearMarketLog_detail(detailID);
dataGridView1.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;//文本向右对齐
 }

 

上面的方法不推荐,推荐以下方法:

拖一个组件backgroundWorker

设置属性:

backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = true;

执行用时较长的操作,

backgroundWorker1.CancellationPending是用来判断是否允许用户取消
 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            dtMain = BLLBillConsume.BllGetClearMarketLog_detail(detailID);
            if (!backgroundWorker1.CancellationPending)
            {//退出
                backgroundWorker1.CancelAsync();
            }
        }
Thread.Sleep(100000);只是为了模拟界面卡死

然后就显示查询到的数据
 private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            dataGridView1.DataSource = dtMain;
            dataGridView1.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;//文本向右对齐
            //Search(detailID.Trim());
        }

这个是开启线程

  backgroundWorker1.RunWorkerAsync();

 

 

 

c#界面卡死处理方法

原文:http://www.cnblogs.com/codeDevotee/p/7467548.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!