Toasts – Blame information for rev 41
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
41 | 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 | |||
24 | _toastFormBufferBlock = new BufferBlock<ToastForm>(new DataflowBlockOptions { CancellationToken = _cancellationToken}); |
||
25 | var toastFormActionBlock = new ActionBlock<ToastForm>(DisplayForm, new ExecutionDataflowBlockOptions { CancellationToken = _cancellationToken }); |
||
26 | |||
27 | _toastFromActionBlockLink = _toastFormBufferBlock.LinkTo(toastFormActionBlock); |
||
28 | } |
||
29 | |||
30 | public void Dispose() |
||
31 | { |
||
32 | if (_toastFromActionBlockLink != null) |
||
33 | { |
||
34 | _toastFromActionBlockLink.Dispose(); |
||
35 | _toastFromActionBlockLink = null; |
||
36 | } |
||
37 | } |
||
38 | |||
39 | private static void DisplayForm(ToastForm toastForm) |
||
40 | { |
||
41 | var thread = new Thread(() => |
||
42 | { |
||
43 | Application.Run(toastForm); |
||
44 | }); |
||
45 | thread.SetApartmentState(ApartmentState.STA); |
||
46 | thread.Start(); |
||
47 | } |
||
48 | |||
49 | public async Task Queue(ToastForm toastForm) |
||
50 | { |
||
51 | await _toastFormBufferBlock.SendAsync(toastForm, _cancellationToken); |
||
52 | } |
||
53 | } |
||
16 | office | 54 | } |