gpt4 book ai didi

c# - |C#|来自另一个线程的 DataGridView.Add() 没有滚动条

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:09 24 4
gpt4 key购买 nike

我有一个问题,DataGridView 从另一个线程获取数据。我的英语不是最好的,所以这里是代码:

private void TaskLoad()
{
List<taskafterdb> tasklist = new List<taskafterdb>();
this.tasklistTableAdapter.FillTaskBoard(sHADOWv5_testDataSet.tasklist)
var s = from x in sHADOWv5_testDataSet.tasklist
orderby x.DATE ascending
select x;
dgv_tasks.DataSource = s.AsDataView();
foreach (var task in sHADOWv5_testDataSet.tasklist)
{
tasklist.Add(new taskafterdb { DATE = task.DATE, COLOR = task.COLOR });
}
tasklist = tasklist.OrderBy(t => t.DATE).ToList();
dgv_tasks.DataSource = tasklist;
foreach (DataGridViewColumn column in dgv_tasks.Columns)
{
column.Frozen = false;
}
dgv_tasks.Columns["TASK"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dgv_tasks.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
dgv_tasks.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dgv_tasks.ScrollBars = ScrollBars.Both;
dgv_tasks.Controls[0].Enabled = true;
dgv_tasks.Controls[1].Enabled = true;
}

这是 TaskLoad() 方法,它用行填充 DGV。

如果我将这个方法放到主线程中,例如:Form1_Load,滚动条就可以正常工作。最大的问题是我应该从另一个线程刷新数据:

    static public Thread dohardwork;
public void Form1_Load(object sender, EventArgs e)
{
dohardwork = new Thread(hardwork);
dohardwork.Start();
}

private void hardwork()
{
TaskLolad();
Form1_Resize(this, null);
IsHardworkDone = true;
fadeintimer.Enabled = true;
dohardwork.Abort();
}

然后,滚动条消失了……有一点空间,但仅此而已。我可以使用鼠标或箭头键滚动,但仅此而已...

感谢您提供的任何帮助! :)

最佳答案

为了提高性能并解决您的问题,您需要执行以下操作

  1. 将您的 TaskLoad 方法重构为 2 个独立的方法。第一个称为 GetTasks,它仅从您的数据库中获取数据,仅此而已。第二个称为 ShowTasks,负责将您的任务加载到数据网格中。

  2. 您的线程应仅调用 GetTasks,在收到结果后,使用 DataGrid 的 BeginInvoke 方法在主线程中运行 ShowTasks 并将结果传递给它。

我正在手机上写这篇文章,所以无法向您展示示例代码。如果您仍然遇到困难,请告诉我,稍后我会向您展示一些示例代码。

关于c# - |C#|来自另一个线程的 DataGridView.Add() 没有滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600308/

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