Ale*_*len 0 c# winforms async-await
我正在使用C#windows窗体并遇到了这个问题
我有两种形式,在第一种形式用户输入用户名和按下按钮.Button调用一个在数据库中保存用户名的函数.
private void btn_Click(object sender, EventArgs e)
{
Database db = new Database();
db.SaveUsername(txtUsername.Text);
new Form2().Show();
}
Run Code Online (Sandbox Code Playgroud)
这个SaveUsername()
函数是在单独的类中
class Database
{
public void SaveUsername(string username)
{
Connect(); //Connection to database
//Some lines to save username in database
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是当用户点击进入它需要一点时间打开Form2
所以我希望新的表单应该出现并且SaveUsername()
功能在后台运行而无需用户等待它完成.怎么做?
更改方法签名并使用Async方法,如:
private async void btn_Click(object sender, EventArgs e)
{
Database db = new Database();
await db.SaveUsernameAsync(txtUsername.Text);
new Form2().Show();
}
class Database
{
public async Task SaveUsername(string username)
{
Connect(); //Connection to database
//Some lines to save username in database
....
await db.SaveAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
或者将用户保存在新线程中:
private async void btn_Click(object sender, EventArgs e)
{
Database db = new Database();
await Task.Run(() => SaveUsername(txtUsername.Text));
new Form2().Show();
}
Run Code Online (Sandbox Code Playgroud)