Я использую объект, который должен отображаться при выполнении длинного оператора SQL; Я запускаю это, используя логическое значение и привязку данных в XAML;
<window>
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVis" />
</Window.Resources>
<Controls:ProgressRing x:Name="PRwaiting" Visibility="{Binding Path=isBusy,Converter={StaticResource BoolToVis}}"/>
</window>
В коде позади;
public async void DoSomething()
isBusy = true;
await LongRunninSQL();
}
private async Task<bool> LongRunninSQL() {
//The isBusy ProgressRing object is visible when I use this delay with a normal SQL statement
//await Task.Delay(3000);
//Yet, the GUI is blocked when this is executed. (and no progressring is displayed)
string SQL = $"select benchmark(9999999, md5('when will it end?')) AS Benchmark";
Collection = await DBC.SelectAsync(SQL);
DB C .SelectAsyn c:
public async Task<DataTable> SelectAsync(string query)
{
var dataTable = new DataTable();
if (this.OpenConnection() == true)
{
using (MySqlCommand cmd = new MySqlCommand(query, connection))
{
cmd.CommandText = query;
using (var dataReader = await cmd.ExecuteReaderAsync())
{
dataTable.Load(dataReader);
//close Data Reader
dataReader.Close();
//close Connection
this.CloseConnection();
//return list to be displayed
return dataTable;
}
}
}
return dataTable;
}
Как узнать, почему SQL оператор останавливает GUI, даже если используются await и asyn c?