PowerToys Run cache issue (#4472)

* Clean termination of powertoys process.

* Fixed issue with run not responding to WM_CLOSE

* Fixed serialization error in pinyin and image cache

* Fixed merge conflict

* Fixed nit wrt to master

* Fixed undeterministic behaviour of Environment.Exit function

* Update timing for terminate process
This commit is contained in:
Divyansh Srivastava
2020-06-25 16:03:50 -07:00
committed by GitHub
parent aad2e8012b
commit 92fa8b7421
9 changed files with 112 additions and 36 deletions

View File

@@ -21,7 +21,7 @@ namespace Wox.Infrastructure
{
private readonly HanyuPinyinOutputFormat Format = new HanyuPinyinOutputFormat();
private ConcurrentDictionary<string, string[][]> PinyinCache;
private BinaryStorage<ConcurrentDictionary<string, string[][]>> _pinyinStorage;
private BinaryStorage<Dictionary<string, string[][]>> _pinyinStorage;
private Settings _settings;
public void Initialize([NotNull] Settings settings)
@@ -36,8 +36,8 @@ namespace Wox.Infrastructure
Stopwatch.Normal("|Wox.Infrastructure.Alphabet.Initialize|Preload pinyin cache", () =>
{
_pinyinStorage = new BinaryStorage<ConcurrentDictionary<string, string[][]>>("Pinyin");
PinyinCache = _pinyinStorage.TryLoad(new ConcurrentDictionary<string, string[][]>());
_pinyinStorage = new BinaryStorage<Dictionary<string, string[][]>>("Pinyin");
SetPinyinCacheAsDictionary(_pinyinStorage.TryLoad(new Dictionary<string, string[][]>()));
// force pinyin library static constructor initialize
PinyinHelper.toHanyuPinyinStringArray('T', Format);
@@ -79,7 +79,7 @@ namespace Wox.Infrastructure
{
return;
}
_pinyinStorage.Save(PinyinCache);
_pinyinStorage.Save(GetPinyinCacheAsDictionary());
}
private static string[] EmptyStringArray = new string[0];
@@ -185,5 +185,15 @@ namespace Wox.Infrastructure
).ToArray();
return combination;
}
private Dictionary<string, string[][]> GetPinyinCacheAsDictionary()
{
return new Dictionary<string, string[][]>(PinyinCache);
}
private void SetPinyinCacheAsDictionary(Dictionary<string, string[][]> usage)
{
PinyinCache = new ConcurrentDictionary<string, string[][]>(usage);
}
}
}