读书人

多线程有关问题求大大帮忙

发布时间: 2012-06-30 17:20:12 作者: rapoo

多线程问题,求大大帮忙
c#winform程序,datagridview的数据源来自一个DataTable,但获取DataTable需要一定的时间,使用单线程的话,获取得DataTable后再显示到datagridview,会大大的降低用户体验。现在考虑使用多线程,用一个线程T1去获取DataTable,主线程sleep 1秒左右,再去读取DataTable,DataTable由T1动态更新。求大神解惑,这种方法可行吗?如果可行,如何实现?有例子更好。非常感谢。

[解决办法]
主线程不能sleep,不然就白多线程了。
sleep使得线程挂起,如果是主线程挂起,那么程序就假死了。
[解决办法]
主线程不要sleep,不然和没多线程没什么区别,照样会导致用户界面无响应
多线程更新用户界面的例子可以看这里
http://blog.csdn.net/niewq/article/details/5607821

[解决办法]
其实用后台线程控件BackgroundWorker还是挺方便的。
[解决办法]
不可行,sleep 1秒,你能保证任务完成吗,线程中加载完再操作grid,用线程+委托

C# code
        DataSet ds = new DataSet(); //全局dataset        public delegate void GetData();        private void BindData()        {            if (dataGridView1.InvokeRequired) //如果是线程中访问的            {                this.BeginInvoke(new GetData(BindData));                return;            }            dataGridView1.DataSource = ds.Tables["stuff"];        }        private void Foo()        {            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=c:\\txl.mdb");            con.Open();            string sql = "select * from stuff";            OleDbDataAdapter da = new OleDbDataAdapter(sql, con);            ds = new DataSet();            da.Fill(ds, "stuff");//填充到ds            BindData();//执行绑定        }        private void button8_Click(object sender, EventArgs e)        {//创建线程,并执行Foo            Thread th = new Thread(new ThreadStart(Foo));            th.Start();        }
[解决办法]
这个不需要另外开线程吧
不是有BeginXXXX之类的异步方法吗
[解决办法]
用委托的beginInvoke 避免管理线程
--需要注意 UI元素 需要在主线程才能操作,DataTable查询完成后需要调用Form上的Invoke函数,切换线程。



[解决办法]
探讨
c#winform程序,datagridview的数据源来自一个DataTable,但获取DataTable需要一定的时间,使用单线程的话,获取得DataTable后再显示到datagridview,会大大的降低用户体验。现在考虑使用多线程,用一个线程T1去获取DataTable,主线程sleep 1秒左右,再去读取DataTable,DataTable由T1动态更新。求大神解惑,这种方法可行吗?……

[解决办法]
探讨
引用:
恩,这是一个方法,读取一部分数据后,绑定下datagridview的数据源,然后继续读取,就是不知道第二次对datagridview的数据源绑定的时候,会不会导致datagridview的刷新?

引用:
引用:
我之前的想法是,datagridview是按需显示的,用户拖动到什么位置,就动态显示到什么位置,在CellValu……

[解决办法]
探讨
代码太长,datatable是从二进制文件中经过一定的解码转换读取的,数据量巨大,有可能达到上千列和上万行,所以这个datatable的读取时间也很长,只能使用datagridview的虚模式,否则读取到datatable后再绑定到datagridview的时间也有点长,用了虚模式几乎看不到数据的加载时间。

引用:
引用:
引用:
……

读书人网 >C#

热点推荐