fix: 再次尝试修复 UI 线程死锁 (#4164)

三回啊三回
This commit is contained in:
MistEO
2023-04-03 23:15:20 +08:00
committed by GitHub
8 changed files with 21 additions and 57 deletions

View File

@@ -216,8 +216,7 @@ namespace MaaWpfGui.Helper
/// 如果要播放音频文件,参考微软文档 <see cref="SoundPlayer"/> 类
/// </summary>
/// <param name="sounds">提示音类型</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
protected async Task PlayNotificationSoundAsync(NotificationSounds sounds = NotificationSounds.None)
protected void PlayNotificationSound(NotificationSounds sounds = NotificationSounds.None)
{
try
{
@@ -245,7 +244,7 @@ namespace MaaWpfGui.Helper
else
{
// 如果不支持就播放其它提示音
await PlayNotificationSoundAsync(NotificationSounds.Asterisk);
PlayNotificationSound(NotificationSounds.Asterisk);
}
}
@@ -455,7 +454,7 @@ namespace MaaWpfGui.Helper
ShowXbtn: false);
// 播放通知提示音
PlayNotificationSoundAsync(sound).Wait();
PlayNotificationSound(sound);
// 任务栏闪烁
FlashWindowEx();

View File

@@ -299,11 +299,7 @@ namespace MaaWpfGui.Main
_taskQueueViewModel.Idle = false;
}
var task = Task.Run(() =>
{
_settingsViewModel.TryToStartEmulator();
});
await task;
await Task.Run(() => _settingsViewModel.TryToStartEmulator());
// 一般是点了“停止”按钮了
if (_taskQueueViewModel.Stopping)

View File

@@ -474,11 +474,7 @@ namespace MaaWpfGui.ViewModels.UI
AddLog(LocalizationHelper.GetString("ConnectingToEmulator"));
string errMsg = string.Empty;
var task = Task.Run(() =>
{
return _asstProxy.AsstConnect(ref errMsg);
});
_caught = await task;
_caught = await Task.Run(() => _asstProxy.AsstConnect(ref errMsg));
if (!_caught)
{
AddLog(errMsg, UiLogColor.Error);

View File

@@ -165,11 +165,7 @@ namespace MaaWpfGui.ViewModels.UI
{
string errMsg = string.Empty;
DepotInfo = LocalizationHelper.GetString("ConnectingToEmulator");
var task = Task.Run(() =>
{
return _asstProxy.AsstConnect(ref errMsg);
});
bool caught = await task;
bool caught = await Task.Run(() => _asstProxy.AsstConnect(ref errMsg));
if (!caught)
{
DepotInfo = errMsg;

View File

@@ -176,11 +176,7 @@ namespace MaaWpfGui.ViewModels.UI
{
string errMsg = string.Empty;
RecruitInfo = LocalizationHelper.GetString("ConnectingToEmulator");
var task = Task.Run(() =>
{
return _asstProxy.AsstConnect(ref errMsg);
});
_caught = await task;
_caught = await Task.Run(() => _asstProxy.AsstConnect(ref errMsg));
if (!_caught)
{
RecruitInfo = errMsg;

View File

@@ -92,7 +92,7 @@ namespace MaaWpfGui.ViewModels.UI
}
else
{
var ret = await Task.Run(() => _versionUpdateViewModel.CheckAndDownloadUpdate());
var ret = await _versionUpdateViewModel.CheckAndDownloadUpdate();
if (ret == VersionUpdateViewModel.CheckUpdateRetT.OK)
{

View File

@@ -180,19 +180,13 @@ namespace MaaWpfGui.ViewModels.UI
_timer.Start();
}
private void Timer1_Elapsed(object sender, EventArgs e)
private async void Timer1_Elapsed(object sender, EventArgs e)
{
if (NeedToUpdateDatePrompt())
{
Task.Run(async () =>
{
await _stageManager.UpdateStageWeb();
Execute.OnUIThread(() =>
{
UpdateDatePrompt();
UpdateStageList(false);
});
});
await _stageManager.UpdateStageWeb();
UpdateDatePrompt();
UpdateStageList(false);
}
refreshCustomInfrastPlanIndexByPeriod();
@@ -206,7 +200,7 @@ namespace MaaWpfGui.ViewModels.UI
{
if (_settingsViewModel.UpdatAutoCheck)
{
Task.Run(_settingsViewModel.ManualUpdate);
await _settingsViewModel.ManualUpdate();
}
}
@@ -727,11 +721,7 @@ namespace MaaWpfGui.ViewModels.UI
AddLog(LocalizationHelper.GetString("ConnectingToEmulator"));
string errMsg = string.Empty;
var task = Task.Run(() =>
{
return _asstProxy.AsstConnect(ref errMsg);
});
bool caught = await task;
bool caught = await Task.Run(() => _asstProxy.AsstConnect(ref errMsg));
// 一般是点了“停止”按钮了
if (Stopping)
@@ -744,11 +734,7 @@ namespace MaaWpfGui.ViewModels.UI
{
AddLog(errMsg, UiLogColor.Error);
AddLog(LocalizationHelper.GetString("ConnectFailed") + "\n" + LocalizationHelper.GetString("TryToStartEmulator"));
var subtask = Task.Run(() =>
{
_settingsViewModel.TryToStartEmulator(true);
});
await subtask;
await Task.Run(() => _settingsViewModel.TryToStartEmulator(true));
if (Stopping)
{
@@ -756,11 +742,7 @@ namespace MaaWpfGui.ViewModels.UI
return;
}
task = Task.Run(() =>
{
return _asstProxy.AsstConnect(ref errMsg);
});
caught = await task;
caught = await Task.Run(() => _asstProxy.AsstConnect(ref errMsg));
if (!caught)
{
AddLog(errMsg, UiLogColor.Error);
@@ -803,8 +785,7 @@ namespace MaaWpfGui.ViewModels.UI
{
Stopping = true;
AddLog(LocalizationHelper.GetString("Stopping"));
var task = Task.Run(_asstProxy.AsstStop);
await task;
await Task.Run(_asstProxy.AsstStop);
}
public void SetStopped()

View File

@@ -483,7 +483,7 @@ namespace MaaWpfGui.ViewModels.UI
url = url.Replace(repTuple.Item1, repTuple.Item2);
}
if (DownloadGithubAssets(url, _assetsObject))
if (await DownloadGithubAssets(url, _assetsObject))
{
OutputDownloadProgress(downloading: false, output: LocalizationHelper.GetString("NewVersionDownloadCompletedTitle"));
downloaded = true;
@@ -700,14 +700,14 @@ namespace MaaWpfGui.ViewModels.UI
/// <param name="url">下载链接</param>
/// <param name="assetsObject">Github Assets 对象</param>
/// <returns>操作成功返回 true反之则返回 false</returns>
private bool DownloadGithubAssets(string url, JObject assetsObject)
private async Task<bool> DownloadGithubAssets(string url, JObject assetsObject)
{
_logItemViewModels = _taskQueueViewModel.LogItemViewModels;
return _httpService.DownloadFileAsync(
return await _httpService.DownloadFileAsync(
new Uri(url),
assetsObject["name"].ToString(),
assetsObject["content_type"].ToString())
.ConfigureAwait(false).GetAwaiter().GetResult();
.ConfigureAwait(false);
}
private static ObservableCollection<LogItemViewModel> _logItemViewModels = null;