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

标签 c# .net datagridview crash scrollbars

正如标题所说,

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/

相关文章:

c# - 你怎么称呼循环进度条?

asp.net - 无法确定元表错误绑定(bind)列表到 asp.net datagridview

c# - 如何使用 SQL 查询 DataGridView?

asp.net - 在我的 Web 应用程序中尝试访问\\replace_with_server_name\PIPE\sql\query 是怎么回事?

C#,跳过 Console.ReadLine();控制台.Read();在循环中

.net - 第二次调用表单时未处理表单加载事件

c# - 错误 : The name 'tBox' does not exist in the current context

c# - jquery Ajax错误函数未触发

c# - 在 web.config 文件中添加命名空间有什么好处?

c# - 记录异常属性