-
Notifications
You must be signed in to change notification settings - Fork 0
/
ModelDirectory.cs
71 lines (55 loc) · 2.29 KB
/
ModelDirectory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Threading.Tasks;
namespace ModelPropertyChecker
{
public class ModelDirectory: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propname)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propname));
}
public ObservableCollection<Model> models { get; set; } = new ObservableCollection<Model>();
public bool IsLoading { get; set; }
public bool IsNotLoading => !IsLoading;
public int totalNumberOfModels { get; set; }
public bool isIndeterminate => totalNumberOfModels == 0;
public float completedPercentage => (float)models.Count / totalNumberOfModels;
public async void LoadFromDirectory(string path, TaskScheduler uiThread)
{
await Task.Run(() => { }).ContinueWith(t => { models.Clear(); }, uiThread);
IsLoading = true;
OnPropertyChanged("IsLoading");
OnPropertyChanged("IsNotLoading");
totalNumberOfModels = 0;
OnPropertyChanged("totalNumberOfModels");
OnPropertyChanged("isIndeterminate");
var tasks = ModelLoader.loadFromDirectory(path, true);
totalNumberOfModels = tasks.Count;
OnPropertyChanged("totalNumberOfModels");
OnPropertyChanged("isIndeterminate");
while (tasks.Count > 0)
{
var finishedTask = await Task.WhenAny(tasks);
tasks.Remove(finishedTask);
#pragma warning disable 4014 //Don't want await here resharper :U
finishedTask.ContinueWith(t =>
{
var model = t.Result;
PropertyVerifier.verifyModel(ref model);
return model;
}).ContinueWith(t =>
{
models.Add(t.Result);
OnPropertyChanged("models");
OnPropertyChanged("completedPercentage");
}, uiThread);
#pragma warning restore 4014
}
IsLoading = false;
OnPropertyChanged("IsLoading");
OnPropertyChanged("IsNotLoading");
}
}
}