Refactoring multithreading

1. ThreadPool -> Task
2. fix deadlock
3. remove unnecessory application.dispatcher.invoke
4. enable non-main thread access to results collection
5. Misc
6. part of #412
This commit is contained in:
bao-qian
2016-05-05 21:15:13 +01:00
parent 923f4ed045
commit d536377329
15 changed files with 146 additions and 140 deletions

View File

@@ -5,6 +5,7 @@ using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using Newtonsoft.Json;
@@ -144,7 +145,7 @@ namespace Wox.Plugin.PluginManagement
string filePath = Path.Combine(folder, Guid.NewGuid().ToString() + ".wox");
context.API.StartLoadingBar();
ThreadPool.QueueUserWorkItem(delegate
Task.Run(() =>
{
using (WebClient Client = new WebClient())
{

View File

@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Wox.Infrastructure.Logger;
namespace Wox.Plugin.Program
@@ -40,7 +41,7 @@ namespace Wox.Plugin.Program
{
if (!isIndexing)
{
ThreadPool.QueueUserWorkItem(o =>
Task.Run(() =>
{
Programs.IndexPrograms();
isIndexing = false;

View File

@@ -1,5 +1,5 @@
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@@ -31,7 +31,7 @@ namespace Wox.Plugin.Program
private void ReIndexing()
{
programSourceView.Items.Refresh();
ThreadPool.QueueUserWorkItem(t =>
Task.Run(() =>
{
Dispatcher.Invoke(() => { indexingPanel.Visibility = Visibility.Visible; });
Programs.IndexPrograms();