source: extensions/PiwigoLib/PiwigoWpf/Command/AsyncCommand.cs @ 11922

Last change on this file since 11922 was 11922, checked in by bayral, 13 years ago

Async image thumbail retriving

File size: 2.3 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows.Input;
6using Com.Piwigo.Wpf.Helper;
7using Com.Piwigo.Wpf.DTO;
8using System.ComponentModel;
9
10namespace Com.Piwigo.Wpf.Command
11{
12    public abstract class AsyncCommand : ICommand
13    {
14        public event EventHandler CanExecuteChanged;
15        public event EventHandler RunWorkerStarting;
16        public event RunWorkerCompletedEventHandler RunWorkerCompleted;
17
18        public abstract string Text { get; }
19        private bool _isRunning;
20        public bool IsRunning
21        {
22            get { return _isRunning; }
23            private set
24            {
25                _isRunning = value;
26                if (CanExecuteChanged != null)
27                    CanExecuteChanged(this, EventArgs.Empty);
28                PwgCmdEvents.OnCmdRunningChanged(this, new EventArgs<bool>(_isRunning));
29            }
30        }
31
32        protected void SendUiInfo(string strMessage)
33        {
34            PwgCmdEvents.OnCmdSendUiInfo(this, new EventArgs<string>(strMessage));
35        }
36
37        protected abstract void OnExecute(object parameter);
38
39        public void Execute(object parameter)
40        {
41            try
42            {
43                onRunWorkerStarting();
44
45                var worker = new BackgroundWorker();
46                worker.DoWork += ((sender, e) => OnExecute(e.Argument));
47                worker.RunWorkerCompleted += ((sender, e) => onRunWorkerCompleted(e));
48                worker.RunWorkerAsync(parameter);
49            }
50            catch (Exception ex)
51            {
52                onRunWorkerCompleted(new RunWorkerCompletedEventArgs(null, ex, true));
53            }
54        }
55
56        private void onRunWorkerStarting()
57        {
58            IsRunning = true;
59            if (RunWorkerStarting != null)
60                RunWorkerStarting(this, EventArgs.Empty);
61        }
62
63        private void onRunWorkerCompleted(RunWorkerCompletedEventArgs e)
64        {
65            IsRunning = false;
66            if (RunWorkerCompleted != null)
67                RunWorkerCompleted(this, e);
68        }
69
70        public virtual bool CanExecute(object parameter)
71        {
72            return !IsRunning;
73        }
74    }
75
76}
Note: See TracBrowser for help on using the repository browser.