我如何在while循环中运行backgroundworker

如何在使用SqlDataReader的while循环中使用backgroundworker?我有一个代码,可以将远程数据库中的记录与本地数据库中的记录进行比较。如果不匹配,它将添加到新记录列表中。如果存在匹配项,但date_modified字段不同,则它将添加到更新列表中。我的代码工作正常,但由于表中记录太多,有时我的程序挂起,因此我无法在UI中向用户提供任何信息。为此,我需要使用backgroundworker。那我该怎么办呢?

我的代码是这样;

remote_query = "SELECT ID,DATE_MODIFIED FROM  REMOTE_TABLE";
remote_connect();
remote_command = new SqlCommand(remote_query,remote_coonnection);
SqlDataReader remote_reader = remote_command.ExecuteReader();
while (remote_reader.Read())
{
    local_query = "SELECT ID,DATE_MODIFIED FROM  LOCAL_TABLE WHERE ID=" + remote_reader[remote_reader.GetOrdinal("ID")].ToString();
    local_connect();
    local_command = new SqlCommand(local_query,poscon);
    SqlDataReader local_reader = local_command.ExecuteReader();
    if (local_reader.HasRows)
    {
        while (local_reader.Read())
        {
            if (remote_reader[remote_reader.GetOrdinal("DATE_MODIFIED")].ToString() != local_reader[local_reader.GetOrdinal("DATE_MODIFIED")].ToString())
            {
                string[] line = { remote_reader[remote_reader.GetOrdinal("ID")].ToString(),remote_reader[remote_reader.GetOrdinal("DEFINITION_")].ToString() };
                var item = new ListViewItem(line);
                list_of_to_be_updated.Items.Add(item);
            }
        }
    }
    else
    {
        string[] line = { remote_reader[remote_reader.GetOrdinal("ID")].ToString(),remote_reader[remote_reader.GetOrdinal("DEFINITION_")].ToString() };
        var item = new ListViewItem(line);
        list_of_to_be_inserted.Items.Add(item);
    }
}
saswertuygjhjh 回答:我如何在while循环中运行backgroundworker

您可以按照此步骤创建后台任务。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio

您可以使用它来设置运行多少分钟。

_timer = new Timer(DoWork,null,TimeSpan.Zero,TimeSpan.FromSeconds(5));

然后在其中进行工作

private void DoWork(object state)
{
    // Your task runs here ....
}
本文链接:https://www.f2er.com/2663928.html

大家都在问