Я хочу создать простое асинхронное приложение для всплывающих окон, и в конце окно формы будет показывать диалог. Но когда я запускаю программу, программа автоматически завершает работу без ошибок. Можете ли вы помочь мне решить, вот мой код
private static string pridbUser = "user";
private static string pridbPwd = "abc123";
public void run()
{
string cnnStr = @"Data Source=localhost;Initial Catalog=sampledb;User ID=" + pridbUser + ";Password=" + pridbPwd + ";MultipleActiveResultSets=true";
string sql = "SELECT * FROM [TABLE1]";
using (SqlConnection sqlcnn = new SqlConnection(cnnStr))
{
sqlcnn.Open();
var tskJob = CreateTableAsync(sql, sqlcnn);
using (frmUI ui = new frmUI())
{
Task.WhenAll(tskJob);
ui.BindControl(tskJob.Result.DefaultView);
ui.ShowDialog();
}
}
}
private async Task<DataTable> CreateTableAsync(string sql, SqlConnection dbCnn)
{
using (SqlCommand _c = new SqlCommand(sql, dbCnn))
{
DataTable dt = new DataTable();
dt.Load(await _c.ExecuteReaderAsync());
return dt;
}
}
Пересмотрите, привет, спасибо за ваш комментарий, затем я переписываю асинхронное задание, норезультат не мой, код ниже:
private static string pridbUser = "user";
private static string pridbPwd = "abc123";
public void run()
{
string cnnStr = @"Data Source=localhost;Initial Catalog=sampledb;User ID=" + pridbUser + ";Password=" + pridbPwd + ";MultipleActiveResultSets=true";
string sql = "SELECT * FROM [TABLE1]";
using (SqlConnection sqlcnn = new SqlConnection(cnnStr))
{
sqlcnn.Open();
Console.WriteLine("Create Table with Asyn mode");
var tskJob = CreateTableAsync(sql, sqlcnn);
using (frmUI ui = new frmUI())
{
Console.WriteLine("Create Form Complete");
Task.WhenAll(tskJob);
ui.BindControl(tskJob.Result.DefaultView);
ui.ShowDialog();
}
}
}
private async Task<DataTable> CreateTableAsync(string sql, SqlConnection dbCnn)
{
Console.WriteLine("Start to Create Table")
using (SqlCommand _c = new SqlCommand(sql, dbCnn))
{
DataTable dt = new DataTable();
dt.Load(await _c.ExecuteReaderAsync());
Console.WriteLine("Delay 5 second")
Thread.Sleep(5000); // delay 5 seconds
Console.WriteLine("End Delay")
return dt;
}
}
Результат выполнения:
Create Table with Asyn mode
Start to Create Table
Delay 5 second
End Delay and Return
Create the Form Complete
Bind Control
Но мой ожидаемый результат должен быть
Create Table with Asyn mode
Start to Create Table
Create the Form Complete
Delay 5 second <-- as it should not wait 5 second and then run form in async process
End Delay and Return
Bind Control
Можете ли выесть хороший совет