Я запускаю статическую функцию main () и запускаю app.Run () для запуска окна WPF.Сначала это модель представления с набором пользовательских элементов управления.Оттуда пользователь нажимает кнопку подключения, которая запускает Task.Run () в другом статическом классе.
Когда моя задача сталкивается с исключениями, они возвращаются к app.Run (), а не к кнопке подключения.Я предполагаю, что они сообщают вызывающему потоку не то место, где была запущена задача.Некоторые из ошибок, с которыми я могу справиться на уровне задач, но другие должны быть видны пользователю.
Поэтому мой вопрос: что будет хорошей практикой для передачи этих ошибок в пользовательский интерфейс?
Мой текущий асинхронный ....
private static async void MainMountLoopAsync()
{
try
{
if (_ctsMount == null) _ctsMount = new CancellationTokenSource();
var ct = _ctsMount.Token;
var task = Task.Run(() =>
{
while (!ct.IsCancellationRequested)
{
MoveAxes();
}
}, ct);
await task;
task.Wait(ct);
AbortSlew();
MainLoopRunning = false;
SkySystem.ConnectSerial = false;
IsSkyConnected = SkySystem.ConnectSerial;
}
catch (OperationCanceledException)
{
MainLoopRunning = false;
MonitorLog.LogToMonitor(MonitorDevice.Telescope, MonitorCategory.Server, MonitorType.Information,
$"{MethodBase.GetCurrentMethod().Name}, {Thread.CurrentThread.ManagedThreadId}, Cancel Main Loop Task Requested");
}
catch (Exception ex)
{
MainLoopRunning = false;
MonitorLog.LogToMonitor(MonitorDevice.Telescope, MonitorCategory.Server, MonitorType.Error,
$"{MethodBase.GetCurrentMethod().Name}, {Thread.CurrentThread.ManagedThreadId}, Message:{ex.Message} Stack:{ex.StackTrace}");
AlertState = true;
throw;
}
}