at the moment my code is getting very repetitive. I have to raise my busy indicator repeatedly throughout the software.
The three actions are
1. Raise Busy Indicator
2. Do the actions
3. Turn Off Busy Indicator
Example
public async void OpenAttachment()
{
Events.PublishOnUIThread(new BusyEvent { IsBusy = true });
await Task.Run(() =>
{
try
{
if (SelectedAttachment == null)
{
return;
}
var tempFile = string.Format(
"{0}\\{1}.{2}", Path.GetTempPath(), SelectedAttachment.FileName, SelectedAttachment.FileExtension);
System.IO.File.WriteAllBytes(tempFile, UnitOfWork.FileRepository.GetFileBytes(SelectedAttachment.Id));
Process.Start(tempFile);
}
catch (Exception ex)
{
Notification.Error("Person - Opening attachment", "File couldn't open, please close last file instance.");
}
});
Events.PublishOnUIThread(new BusyEvent { IsBusy = false });
}
I'm looking to run a method such that it'll execute the busy indicator without having to repeat it everytime.
Something like
public async void OpenAttachment()
{
Execute(() => await Task.Run(() => {....TaskWork});
}
Wondering if someone can give me tips on how to reduce this repeated code.
ContinueWith()
.async void
, it is only allowed to be used to make your method signature compatible with a event handler. Your function does not appear to be a event handler so it should be doingasync Task
instead.