正如标题所说,
DataGridview.ScrollBars = 垂直;
假设DataGridview的视觉可以包含4行,如果行数达到6,它就有一个Vertical ScrollBar。但如果点击ScrollBar,程序就会崩溃。 如果我们设置DataGridview.ScrollBars = None,就不会出现问题。
public partial class visitorLeave : Form
{
public visitorLeave()
{
InitializeComponent();
}
bool isWorkerStopped = false;
bool clickstart = false;
ManageEmployee me = null;
Thread tr1;
private void visitorLeave_Load(object sender, EventArgs e)
{
me = new ManageEmployee(10);
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = me.DataSource;
tr1 = new Thread(new ThreadStart(Add));
tr1.IsBackground = true;
tr1.Start();
}
void Add()
{
while (!isWorkerStopped)
{
if (clickstart)
{
me.AddEmployee(new EmployeeData("new" + DateTime.Now.Ticks.ToString(), "0", "0", "0", "0", "0", null));
dataGridView1.DataSource = me.DataSource;
dataGridView1.UpdateRowHeightInfo(0, true);
clickstart = false;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
clickstart = !clickstart;
}
}
最佳答案
这是 Windows 窗体调试逻辑中的漏洞之一,它试图检测您以线程不安全的方式使用控件。它看不到您在 UI 线程以外的线程中分配 DataSource 属性。
使用BackgroundWorker 来实现线程逻辑。并使用其 RunworkerCompleted 事件处理程序来设置网格的 DataSource 属性。或者,如果您希望保留现有的线程代码,请使用 Control.Invoke。
关于c# - 当所有行的高度超过DataGridview的视觉高度时,DataGridview的ScrollBars会Crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4032802/