gpt4 book ai didi

c# - 当所有行的高度超过DataGridview的视觉高度时,DataGridview的ScrollBars会Crash

转载 作者:行者123 更新时间:2023-12-02 21:31:29 25 4
gpt4 key购买 nike

正如标题所说,

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com