Toasts – Diff between revs 23 and 41

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 23 Rev 41
Line 1... Line 1...
1 using System; 1 using System;
2 using System.Threading; 2 using System.Threading;
3 using System.Threading.Tasks; 3 using System.Threading.Tasks;
4 using System.Threading.Tasks.Dataflow; 4 using System.Threading.Tasks.Dataflow;
5 using System.Windows.Forms; 5 using System.Windows.Forms;
6   6  
7 namespace Toasts 7 namespace Toasts
8 { 8 {
9 public class Toasts : IDisposable 9 public class Toasts : IDisposable
10 { 10 {
11 private readonly CancellationToken _cancellationToken; 11 private readonly CancellationToken _cancellationToken;
12 private readonly BufferBlock<ToastForm> _toastFormBufferBlock; 12 private readonly BufferBlock<ToastForm> _toastFormBufferBlock;
13 private IDisposable _toastFromActionBlockLink; 13 private IDisposable _toastFromActionBlockLink;
14   14  
15 private Toasts() 15 private Toasts()
16 { 16 {
17 17
18 } 18 }
19   19  
20 public Toasts(CancellationToken cancellationToken) : this() 20 public Toasts(CancellationToken cancellationToken) : this()
21 { 21 {
22 _cancellationToken = cancellationToken; 22 _cancellationToken = cancellationToken;
23   23  
24 _toastFormBufferBlock = new BufferBlock<ToastForm>(new DataflowBlockOptions { CancellationToken = _cancellationToken}); 24 _toastFormBufferBlock = new BufferBlock<ToastForm>(new DataflowBlockOptions { CancellationToken = _cancellationToken});
25 var toastFormActionBlock = new ActionBlock<ToastForm>(DisplayForm, new ExecutionDataflowBlockOptions { CancellationToken = _cancellationToken }); 25 var toastFormActionBlock = new ActionBlock<ToastForm>(DisplayForm, new ExecutionDataflowBlockOptions { CancellationToken = _cancellationToken });
26   26  
27 _toastFromActionBlockLink = _toastFormBufferBlock.LinkTo(toastFormActionBlock); 27 _toastFromActionBlockLink = _toastFormBufferBlock.LinkTo(toastFormActionBlock);
28 } 28 }
29   29  
30 public void Dispose() 30 public void Dispose()
31 { 31 {
32 if (_toastFromActionBlockLink != null) 32 if (_toastFromActionBlockLink != null)
33 { 33 {
34 _toastFromActionBlockLink.Dispose(); 34 _toastFromActionBlockLink.Dispose();
35 _toastFromActionBlockLink = null; 35 _toastFromActionBlockLink = null;
36 } 36 }
37 } 37 }
38   38  
39 private static void DisplayForm(ToastForm toastForm) 39 private static void DisplayForm(ToastForm toastForm)
40 { 40 {
41 var thread = new Thread(() => 41 var thread = new Thread(() =>
42 { 42 {
43 Application.Run(toastForm); 43 Application.Run(toastForm);
44 }); 44 });
45 thread.SetApartmentState(ApartmentState.STA); 45 thread.SetApartmentState(ApartmentState.STA);
46 thread.Start(); 46 thread.Start();
47 } 47 }
48   48  
49 public async Task Queue(ToastForm toastForm) 49 public async Task Queue(ToastForm toastForm)
50 { 50 {
51 await _toastFormBufferBlock.SendAsync(toastForm, _cancellationToken); 51 await _toastFormBufferBlock.SendAsync(toastForm, _cancellationToken);
52 } 52 }
53 } 53 }
54 } 54 }
55   55