最近在写一个多线程程序,需要跨线程访问DataGridView,绑定其DataSource,而且由于线程几乎是每隔几秒都会重新绑定一次DataGridView的DataSource的,所以,遇到各种蛋疼的问题。
首先说一个最常见最容易想到的办法:
首先在主线程设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;,随后去Designer.cs文件中将DataGridView的声明修改成public static 然后,在自定义的线程中直接使用datagridview1.DataSource =dt;然后结果是程序莫名的卡死。
上网一查,大家都说跨线程访问控件时这么禁用跨线程调用检查是不科学的,需要声明一个委托来访问,于是继续折腾写了如下代码
public delegate void SetDGVSource(DataTable dt);
public static void SetDGVSourceFunction(DataTable dt)
{
if (dataG