C# 在DataGridView中移动并加载图片而不冻结UI

C# 在DataGridView中移动并加载图片而不冻结UI,c#,datagridview,C#,Datagridview,我有一个DataGridView,用户在其中通过keypup和keypdown移动 现在,我使用keyup事件根据一列中的值刷新imageBox中的图像。如果用户只向下或向上移动一行,它就可以正常工作。问题是,如果用户想通过上下几次键快速移动几行,UI总是会冻结一段时间 如何防止UI冻结,并使图片加载成为“后台工作” 到目前为止,我的代码: private void LoadPicture(string path) { threadworker = new Thread(() =>

我有一个
DataGridView
,用户在其中通过keypup和keypdown移动

现在,我使用keyup事件根据一列中的值刷新imageBox中的图像。如果用户只向下或向上移动一行,它就可以正常工作。问题是,如果用户想通过上下几次键快速移动几行,UI总是会冻结一段时间

如何防止UI冻结,并使图片加载成为“后台工作”

到目前为止,我的代码:

private void LoadPicture(string path)
{
    threadworker = new Thread(() => pictureBox1.Image = path);
    threadworker.Start();
}

public void datenübergeben()
{
    if (dataGridView1.CurrentRow.Cells["Bild1"].Value.ToString().Length != 0)
    {
        LoadPicture(dataGridView1.CurrentRow.Cells["Bild1"].Value.ToString());
    }
}

我有一个有用的想法:

创建一个子例程,在网格移动和LoadPicture之间执行操作。取而代之的是调用LoadPicture,调用该例程

此例行程序将:

1-获取当前网格行或图片名称

2-启动任务。延迟几毫秒甚至1秒

3-再次将当前网格行或图片放入另一个变量,并与第一个变量进行比较(步骤1)


如果没有更改,请调用LoadPicture…

不要在单独的线程中访问GUI控件。不要使用空的Twit-Cask.OK,现在不尝试捕捉任何解决方案。考虑使用异步任务,它不会阻止UI,但图像将被显示为一个延迟。告诉我它是如何运行的,或者如果您需要关于如何执行此操作的代码片段。