Toasts – Blame information for rev 23

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