winfrom中避免读取数据时窗口诈死

原创
小哥 3年前 (2022-11-16) 阅读数 42 #大杂烩

比较实用的一个方法,希望对你们有帮助。

net4.5才支持

//使用线程
System.Threading.Tasks.Task.Run(new Action(方法名));       //Action里的方法不允许有参数

//1.禁用异常(为解决使用线程后,DataGridView滚动条不出现*注意:不可在多线程中随便使用。)
Control.CheckForIllegalCrossThreadCalls = false;

//2.使用 Invoke 将执行数据绑定的代码交回给主线程(因为 DataGridView 是主线程创建的(为解决使用线程后,DataGridView滚动条不出现))
            DataGridView.Invoke(new InvokeHandler(delegate ()
            {
                 DataGridView.DataSource = null;
                 DataGridView.DataSource = 数据源;
            }));

net4.0就可以支持

        private delegate void InitDataSourceDelegate();        

        private void Load(object sender, EventArgs e)
        {
            Thread t = new Thread(InitDataSource);
            t.IsBackground = true;
            t.Start();
        }

        private async void InitDataSource()
        {
            //我这里放的是调用Api请求,因为耗时比较久
            //GetData();

            //数据请求完成后,去执行委托把数据绑定到控件上
            this.Invoke(new InitDataSourceDelegate(Init));
        }

        private async void Init()
        {
            //给控件绑定数据源
        }
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门