gpt4 book ai didi

c# - 如何在 C# 中的后台线程上执行异步数据库调用

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

我正在处理一些数据库代码。在某些时候,我确实需要将这些调用从 UI 线程移到后台线程。我已经在下面发布了我的代码,但我很好奇一些这样做的例子,或者是否有人可以展示如何做到这一点。我在 Java 中完成了异步调用,只是想全神贯注地使用 Visual Studio 2013 执行此 C#。任何帮助将不胜感激。

数据库代码:

    static public Project.Project QueryProject(string projDatabaseName)
{
Project.Project proj = new Project.Project();
string connStr = "server=localhost;database=" + projDatabaseName + ";user=******;port=3306;password=*****;";
string queryStr = "SELECT * FROM " + projDatabaseName + ".project";
MySqlConnection myConnection = new MySqlConnection(connStr);
MySqlCommand myCommand = new MySqlCommand(queryStr, myConnection);
myConnection.Open();

try
{
MySqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
proj.ProjectID = int.Parse(myReader["ProjectID"].ToString());
proj.ProjectName = myReader["ProjectName"].ToString();
proj.ProjectStartDate = Convert.ToDateTime(myReader["ProjectStartDate"]);
proj.ProjectEndDate = Convert.ToDateTime(myReader["ProjectEndDate"]);
proj.ProjectNotes = myReader["ProjectNotes"].ToString();
}
myReader.Close();

}
catch (Exception e)
{
Console.WriteLine(e.ToString());
return null;
}
finally
{
myConnection.Close();
}
return proj;
}

调用数据库代码:

savedProj = ProjectDbInteraction.QueryProject(currentProjDb);

最佳答案

您应该对 BackgroundWorker 做一些研究 https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker%28v=vs.110%29.aspx以及一般使用 C# 的线程。

我会尝试使用看起来像这样的后台 worker :

//setting up your background worker.
var worker = new BackgroundWorker();
worker.DoWork += bgw_DoWork;
worker.RunWorkerCompleted += bgw_WorkCompleted;
worker.ProgressChanged += bgw_ProgressChanged;

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = ProjectDbInteraction.QueryProject(currentProjDb);
}

private void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//Here you can inspect the worker and update UI if needed.
}

private void bgw_WorkCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//check for errors, and other unexpected results first...
//assuming that savedProj is some private member variable of your class,
//just assign the variable to the Result here.
savedProj = (Project.Project)e.Result;
}

关于c# - 如何在 C# 中的后台线程上执行异步数据库调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28221774/

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