tag:blogger.com,1999:blog-80945885734357152942024-02-08T04:24:52.103-08:00Fathom SavvyFathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-8094588573435715294.post-43683916011720246452011-09-14T21:27:00.000-07:002011-09-14T21:30:50.987-07:00Windows 8 lets you build apps for tablets!Today at Microsoft's build conference, Microsoft released a Developer Preview of Windows 8 and showcased its potential for competing in the tablet PC industry. If you want to get a leg up on the competition, and the opportunity to make some money building apps, check out the video of the preview at <a href="http://www.buildwindows.com/">http://www.buildwindows.com/</a> . In addition to the video of the conference, you can download a pseudo CTP (a.k.a Developer Preview) of the OS on the website (also found at <a href="http://msdn.microsoft.com/en-us/windows/apps/br229516">http://msdn.microsoft.com/en-us/windows/apps/br229516</a>) .<br />
<br />
If you've heard rumors that .NET was dead and that new apps would have to be built using HTML5 and javascript, you can put your fears aside. Microsoft lets you build apps in the language of your choosing. This includes C++, C#, VB, HTML5, and I could go on. Windows 8 apps are marketed as using the Metro UI, which includes touch capability, and simplistic app sharing. During the conference, they showcase how easy it is to manipulate the UI design using HTML5 and Expression Blend 5 (new version which works with XAML and HTML5), but they don't discuss how easy it is to design a C# application using Metro's features. I'm curious to try and hope to show the pros/cons in another post.<br />
<br />
If you don't want to watch the 3 hour long video in its entirety, you should at the very least skip to the Keynote #1 speach at about 14:27 minutes in. They show off a new feature called picture password, that allows you to login to the system using a system of touches and swipes. No more passwords...how cool!<br />
<a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/KEY-0001">http://channel9.msdn.com/Events/BUILD/BUILD2011/KEY-0001</a>Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com0Philadelphia, PA, USA39.952335 -75.16378900000000839.816841 -75.326059000000015 40.087829 -75.001519tag:blogger.com,1999:blog-8094588573435715294.post-58592579952122735632011-04-18T17:45:00.000-07:002011-04-18T17:45:44.276-07:00Quartz.NET 2.0 is available!There is a second release of Quart.Net called <a href="https://github.com/lahma/quartznet">Quart.Net 2.0</a>. It's still in the beta stage, but it's a big step up from version 1.0.3. It has support for Generics and much more. Check it out <a href="https://github.com/lahma/quartznet">here</a>. For those who are github savvy you can find it at <a href="https://github.com/lahma/quartznet.git">https://github.com/lahma/quartznet.git.</a>Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com0tag:blogger.com,1999:blog-8094588573435715294.post-47366708141806115502011-04-02T17:33:00.000-07:002011-04-18T17:34:26.272-07:00Quartz.NET is available on NuGetThe Quartz.Net library has been uploaded to <a href="http://nuget.org/">NuGet</a>. If you’re using <a href="http://nuget.org/Packages/Packages/Details/Quartz-1-0-3">Quartz.Net</a> and <a href="http://nuget.org/">NuGet</a>, this should help you with setting up your environment and in keeping things current. The Common.Logging and the Common.Logging.Log4net and Log4net libraries are on NuGet as well. These are all required dependencies for running Quartz.Net with Log4net.Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com0tag:blogger.com,1999:blog-8094588573435715294.post-61452402561657830072011-03-29T18:56:00.000-07:002011-03-31T20:16:54.964-07:00Event Based Listeners in Quartz.NETSince Quartz.NET is ported from Java, it does not have an inkling of what a delegate is or should be. Below, I show how to use events in your Quartz.Net implementation. You can rename the namespaces and classes.<br />
<code><br />
<span style="color: blue;"><span style="font-family: Consolas;">.</span></span><br />
<span style="color: blue;"><span style="font-family: Consolas;"><br />
</span></span><br />
<div class="WordSection1"><pre style="background: white;"></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> System;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">System.Collections.Generic</span>;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">System.Linq</span>;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">System.Text</span>;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> Quartz;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">System.Threading</span>;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">namespace</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">Hizzah.JobListeners</span><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;">{<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">class</span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">BeforeJobExecutedEventArgs</span></span><span style="color: black; font-family: Consolas;"> : </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">EventArgs</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span></span><span style="color: black; font-family: Consolas;"> _context;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> BeforeJobExecutedEventArgs(</span><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span><span style="color: black; font-family: Consolas;"> context)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _context = context;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span></span><span style="color: black; font-family: Consolas;"> Context<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">get</span></span><span style="color: black; font-family: Consolas;"> { </span><span style="color: blue; font-family: Consolas;">return</span><span style="color: black; font-family: Consolas;"> _context; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">set</span></span><span style="color: black; font-family: Consolas;"> { _context = </span><span style="color: blue; font-family: Consolas;">value</span><span style="color: black; font-family: Consolas;">; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">class</span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">AfterJobExecutedEventArgs</span></span><span style="color: black; font-family: Consolas;"> : </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">EventArgs</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span></span><span style="color: black; font-family: Consolas;"> _context;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span></span><span style="color: black; font-family: Consolas;"> Context<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">get</span></span><span style="color: black; font-family: Consolas;"> { </span><span style="color: blue; font-family: Consolas;">return</span><span style="color: black; font-family: Consolas;"> _context; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">set</span></span><span style="color: black; font-family: Consolas;"> { _context = </span><span style="color: blue; font-family: Consolas;">value</span><span style="color: black; font-family: Consolas;">; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionException</span></span><span style="color: black; font-family: Consolas;"> _exception;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionException</span></span><span style="color: black; font-family: Consolas;"> Exception<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">get</span></span><span style="color: black; font-family: Consolas;"> { </span><span style="color: blue; font-family: Consolas;">return</span><span style="color: black; font-family: Consolas;"> _exception; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">set</span></span><span style="color: black; font-family: Consolas;"> { _exception = </span><span style="color: blue; font-family: Consolas;">value</span><span style="color: black; font-family: Consolas;">; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> AfterJobExecutedEventArgs(</span><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span><span style="color: black; font-family: Consolas;"> context, </span><span style="color: #2b91af; font-family: Consolas;">JobExecutionException</span><span style="color: black; font-family: Consolas;"> exception)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _context = context;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _exception = exception;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">using</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> System;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">using</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="SpellE">System.Collections.Generic</span>;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">using</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="SpellE">System.Linq</span>;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">using</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="SpellE">System.Text</span>;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">using</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> Quartz;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">using</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="SpellE">System.Threading</span>;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">namespace</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="SpellE">Hizzah.JobListeners</span><o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;">{<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">public</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">class</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">HizzahJobListener</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> : </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">IJobListener</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"><o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">private</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">static</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">readonly</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> log4net.</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">ILog</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> log = log4net.</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">LogManager</span><span style="color: black; font-family: Consolas; font-size: 10pt;">.GetLogger(System.Reflection.</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">MethodBase</span><span style="color: black; font-family: Consolas; font-size: 10pt;">.GetCurrentMethod().DeclaringType);<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">public</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">event</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">EventHandler</span><span style="color: black; font-family: Consolas; font-size: 10pt;"><</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">BeforeJobExecutedEventArgs</span><span style="color: black; font-family: Consolas; font-size: 10pt;">> BeforeJobExecution;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">public</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">event</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">EventHandler</span><span style="color: black; font-family: Consolas; font-size: 10pt;"><</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">AfterJobExecutedEventArgs</span><span style="color: black; font-family: Consolas; font-size: 10pt;">> AfterJobExecution;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">public</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="SpellE">HizzahJobListener</span>(</span><span style="color: blue; font-family: Consolas; font-size: 10pt;">string</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> name)<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> _name = name;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: blue; font-family: Consolas; font-size: 10pt;"> #region</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="SpellE">IJobListener</span> Members<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">private</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">string</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> _name;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">public</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">string</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> Name<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">get</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> { </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">return</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> _name; }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">public</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">void</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="SpellE">JobToBeExecuted</span>(</span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">JobExecutionContext</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> context)<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> _name = <span class="SpellE">context.JobDetail.Name</span>;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="GramE">OnBeforeJobExecution(</span></span><span style="color: blue; font-family: Consolas; font-size: 10pt;">new</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">BeforeJobExecutedEventArgs</span><span style="color: black; font-family: Consolas; font-size: 10pt;">(context));<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">protected</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">void</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> OnBeforeJobExecution(</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">BeforeJobExecutedEventArgs</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> args)<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: green; font-family: Consolas; font-size: 10pt;">// Copy a reference to the delegate field now into a temporary field for thread safety</span><span style="color: black; font-family: Consolas; font-size: 10pt;"><o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">EventHandler</span><span style="color: black; font-family: Consolas; font-size: 10pt;"><</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">BeforeJobExecutedEventArgs</span><span style="color: black; font-family: Consolas; font-size: 10pt;">> temp = </span><span class="GramE"><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">Interlocked</span><span style="color: black; font-family: Consolas; font-size: 10pt;">.CompareExchange(</span></span><span style="color: blue; font-family: Consolas; font-size: 10pt;">ref</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> BeforeJobExecution, </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">null</span><span style="color: black; font-family: Consolas; font-size: 10pt;">, </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">null</span><span style="color: black; font-family: Consolas; font-size: 10pt;">);<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">if</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> (temp != </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">null</span><span style="color: black; font-family: Consolas; font-size: 10pt;">)<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="GramE">temp(</span></span><span style="color: blue; font-family: Consolas; font-size: 10pt;">this</span><span style="color: black; font-family: Consolas; font-size: 10pt;">, <span class="SpellE">args</span>);<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">protected</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">void</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> OnAfterJobExecution(</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">AfterJobExecutedEventArgs</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> args)<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: green; font-family: Consolas; font-size: 10pt;">// Copy a reference to the delegate field now into a temporary field for thread safety</span><span style="color: black; font-family: Consolas; font-size: 10pt;"><o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">EventHandler</span><span style="color: black; font-family: Consolas; font-size: 10pt;"><</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">AfterJobExecutedEventArgs</span><span style="color: black; font-family: Consolas; font-size: 10pt;">> temp = </span><span class="GramE"><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">Interlocked</span><span style="color: black; font-family: Consolas; font-size: 10pt;">.CompareExchange(</span></span><span style="color: blue; font-family: Consolas; font-size: 10pt;">ref</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> AfterJobExecution, </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">null</span><span style="color: black; font-family: Consolas; font-size: 10pt;">, </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">null</span><span style="color: black; font-family: Consolas; font-size: 10pt;">);<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">if</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> (temp != </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">null</span><span style="color: black; font-family: Consolas; font-size: 10pt;">)<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="GramE">temp(</span></span><span style="color: blue; font-family: Consolas; font-size: 10pt;">this</span><span style="color: black; font-family: Consolas; font-size: 10pt;">, <span class="SpellE">args</span>);<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">public</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">void</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> JobExecutionVetoed(</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">JobExecutionContext</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> context)<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">throw</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">new</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">NotImplementedException</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;">();<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas; font-size: 10pt;">public</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 10pt;">void</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> JobWasExecuted(</span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">JobExecutionContext</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> context, </span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">JobExecutionException</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> jobException)<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> {<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> _name = <span class="SpellE">context.JobDetail.Name</span>;<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> <span class="GramE">OnAfterJobExecution(</span></span><span style="color: blue; font-family: Consolas; font-size: 10pt;">new</span><span style="color: black; font-family: Consolas; font-size: 10pt;"> </span><span style="color: #2b91af; font-family: Consolas; font-size: 10pt;">AfterJobExecutedEventArgs</span><span style="color: black; font-family: Consolas; font-size: 10pt;">(context, jobException));<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><br />
</div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: blue; font-family: Consolas; font-size: 10pt;"> #<span class="SpellE">endregion</span></span><span style="color: black; font-family: Consolas; font-size: 10pt;"><o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;"> }<o:p></o:p></span></div><br />
<div class="MsoNormal" style="background: white; line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"><span style="color: black; font-family: Consolas; font-size: 10pt;">}<o:p></o:p></span></div><br />
<div class="MsoNormal"><br />
</div><br />
<pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> System;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">System.Collections.Generic</span>;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">System.Linq</span>;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">System.Text</span>;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> Quartz;<o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">using</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">System.Threading</span>;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span class="GramE"><span style="color: blue; font-family: Consolas;">namespace</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">Hizzah.TriggerListeners</span><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;">{<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">class</span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">TriggerFiredEventArgs</span></span><span style="color: black; font-family: Consolas;"> : </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">EventArgs</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span></span><span style="color: black; font-family: Consolas;"> _context;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> _trigger;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">TriggerFiredEventArgs</span>()<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="GramE">:<span style="color: blue;">base</span></span>()<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {}<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> TriggerFiredEventArgs(</span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> trigger, </span><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span><span style="color: black; font-family: Consolas;"> context)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="GramE">:<span style="color: blue;">base</span></span>()<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _context = context;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _trigger = trigger;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span></span><span style="color: black; font-family: Consolas;"> Context<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">get</span></span><span style="color: black; font-family: Consolas;"> { </span><span style="color: blue; font-family: Consolas;">return</span><span style="color: black; font-family: Consolas;"> _context; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">set</span></span><span style="color: black; font-family: Consolas;"> { _context = </span><span style="color: blue; font-family: Consolas;">value</span><span style="color: black; font-family: Consolas;">; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> Trigger<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">get</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">return</span></span><span style="color: black; font-family: Consolas;"> _trigger;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">set</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _trigger = </span><span style="color: blue; font-family: Consolas;">value</span><span style="color: black; font-family: Consolas;">;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">class</span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">TriggerCompletedEventArgs</span></span><span style="color: black; font-family: Consolas;"> : </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">EventArgs</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span></span><span style="color: black; font-family: Consolas;"> _context;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> _trigger;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">SchedulerInstruction</span></span><span style="color: black; font-family: Consolas;"> _instruction;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span></span><span style="color: black; font-family: Consolas;"> Context<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">get</span></span><span style="color: black; font-family: Consolas;"> { </span><span style="color: blue; font-family: Consolas;">return</span><span style="color: black; font-family: Consolas;"> _context; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">set</span></span><span style="color: black; font-family: Consolas;"> { _context = </span><span style="color: blue; font-family: Consolas;">value</span><span style="color: black; font-family: Consolas;">; }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> Trigger<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">get</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">return</span></span><span style="color: black; font-family: Consolas;"> _trigger;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">set</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _trigger = </span><span style="color: blue; font-family: Consolas;">value</span><span style="color: black; font-family: Consolas;">;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">SchedulerInstruction</span></span><span style="color: black; font-family: Consolas;"> Instruction<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">get</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">return</span></span><span style="color: black; font-family: Consolas;"> _instruction;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">set</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _instruction = </span><span style="color: blue; font-family: Consolas;">value</span><span style="color: black; font-family: Consolas;">;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">TriggerCompletedEventArgs</span>()<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> { }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> TriggerCompletedEventArgs(</span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> trigger, </span><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span><span style="color: black; font-family: Consolas;"> context, </span><span style="color: #2b91af; font-family: Consolas;">SchedulerInstruction</span><span style="color: black; font-family: Consolas;"> instruction)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="GramE">:<span style="color: blue;">base</span></span>()<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _context = context;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _trigger = trigger;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _instruction = instruction;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">class</span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">HizzahTriggerListener</span></span><span style="color: black; font-family: Consolas;"> : </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">ITriggerListener</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">private</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">static</span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">readonly</span><span style="color: black; font-family: Consolas;"> log4net.</span><span style="color: #2b91af; font-family: Consolas;">ILog</span><span style="color: black; font-family: Consolas;"> log = log4net.</span><span style="color: #2b91af; font-family: Consolas;">LogManager</span><span style="color: black; font-family: Consolas;">.GetLogger(System.Reflection.</span><span style="color: #2b91af; font-family: Consolas;">MethodBase</span><span style="color: black; font-family: Consolas;">.GetCurrentMethod().DeclaringType);<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">private</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">string</span><span style="color: black; font-family: Consolas;"> _name;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">event</span><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">EventHandler</span><span style="color: black; font-family: Consolas;"><</span><span style="color: #2b91af; font-family: Consolas;">TriggerFiredEventArgs</span><span style="color: black; font-family: Consolas;">> TriggerFiredEvent;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">event</span><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">EventHandler</span><span style="color: black; font-family: Consolas;"><</span><span style="color: #2b91af; font-family: Consolas;">TriggerCompletedEventArgs</span><span style="color: black; font-family: Consolas;">> TriggerCompletedEvent;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">HizzahTriggerListener</span>(</span><span style="color: blue; font-family: Consolas;">string</span><span style="color: black; font-family: Consolas;"> name)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> _name = name;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: blue; font-family: Consolas;"> #region</span><span style="color: black; font-family: Consolas;"> <span class="SpellE">ITriggerListener</span> Members<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">string</span><span style="color: black; font-family: Consolas;"> Name<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">get</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">return</span></span><span style="color: black; font-family: Consolas;"> _name;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">void</span><span style="color: black; font-family: Consolas;"> TriggerFired(</span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> trigger, </span><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span><span style="color: black; font-family: Consolas;"> context)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="SpellE"><span class="GramE">log.Debug</span></span><span class="GramE">(</span></span><span style="color: #a31515; font-family: Consolas;">"<span class="SpellE">TriggerFired</span> Fired"</span><span style="color: black; font-family: Consolas;">);<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="GramE">OnTriggerFired(</span></span><span style="color: blue; font-family: Consolas;">new</span><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">TriggerFiredEventArgs</span><span style="color: black; font-family: Consolas;">(trigger, context));<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">bool</span><span style="color: black; font-family: Consolas;"> VetoJobExecution(</span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> trigger, </span><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span><span style="color: black; font-family: Consolas;"> context)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="SpellE"><span class="GramE">log.Debug</span></span><span class="GramE">(</span></span><span style="color: #a31515; font-family: Consolas;">"<span class="SpellE">VetoJobExecution</span> Fired"</span><span style="color: black; font-family: Consolas;">);<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">return</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">false</span><span style="color: black; font-family: Consolas;">;<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span style="color: green; font-family: Consolas;">//throw new <span class="SpellE"><span class="GramE">NotImplementedException</span></span><span class="GramE">(</span>);</span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">void</span><span style="color: black; font-family: Consolas;"> <span class="SpellE">TriggerMisfired</span>(</span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> trigger)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="SpellE"><span class="GramE">log.Debug</span></span><span class="GramE">(</span></span><span style="color: #a31515; font-family: Consolas;">"<span class="SpellE">TriggerMisfired</span> Fired"</span><span style="color: black; font-family: Consolas;">);<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">throw</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">new</span><span style="color: black; font-family: Consolas;"> </span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">NotImplementedException</span></span><span style="color: black; font-family: Consolas;">();<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">void</span><span style="color: black; font-family: Consolas;"> TriggerComplete(</span><span style="color: #2b91af; font-family: Consolas;">Trigger</span><span style="color: black; font-family: Consolas;"> trigger, </span><span style="color: #2b91af; font-family: Consolas;">JobExecutionContext</span><span style="color: black; font-family: Consolas;"> context, </span><span style="color: #2b91af; font-family: Consolas;">SchedulerInstruction</span><span style="color: black; font-family: Consolas;"> triggerInstructionCode)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="SpellE"><span class="GramE">log.Debug</span></span><span class="GramE">(</span></span><span style="color: #a31515; font-family: Consolas;">"<span class="SpellE">TriggerComplete</span> Fired"</span><span style="color: black; font-family: Consolas;">);<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="GramE">OnTriggerCompleted(</span></span><span style="color: blue; font-family: Consolas;">new</span><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">TriggerCompletedEventArgs</span><span style="color: black; font-family: Consolas;">(trigger, context, triggerInstructionCode));<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: blue; font-family: Consolas;"> #<span class="SpellE">endregion</span></span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">void</span><span style="color: black; font-family: Consolas;"> <span class="SpellE">OnTriggerFired</span>(</span><span class="SpellE"><span style="color: #2b91af; font-family: Consolas;">TriggerFiredEventArgs</span></span><span style="color: black; font-family: Consolas;"> <span class="SpellE">args</span>)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span style="color: green; font-family: Consolas;">// Copy a reference to the delegate field now into a temporary field for thread safety</span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">EventHandler</span><span style="color: black; font-family: Consolas;"><</span><span style="color: #2b91af; font-family: Consolas;">TriggerFiredEventArgs</span><span style="color: black; font-family: Consolas;">> temp = </span><span class="GramE"><span style="color: #2b91af; font-family: Consolas;">Interlocked</span><span style="color: black; font-family: Consolas;">.CompareExchange(</span></span><span style="color: blue; font-family: Consolas;">ref</span><span style="color: black; font-family: Consolas;"> TriggerFiredEvent, </span><span style="color: blue; font-family: Consolas;">null</span><span style="color: black; font-family: Consolas;">, </span><span style="color: blue; font-family: Consolas;">null</span><span style="color: black; font-family: Consolas;">);<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">if</span></span><span style="color: black; font-family: Consolas;"> (temp != </span><span style="color: blue; font-family: Consolas;">null</span><span style="color: black; font-family: Consolas;">)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="GramE">temp(</span></span><span style="color: blue; font-family: Consolas;">this</span><span style="color: black; font-family: Consolas;">, <span class="SpellE">args</span>);<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">public</span></span><span style="color: black; font-family: Consolas;"> </span><span style="color: blue; font-family: Consolas;">void</span><span style="color: black; font-family: Consolas;"> OnTriggerCompleted(</span><span style="color: #2b91af; font-family: Consolas;">TriggerCompletedEventArgs</span><span style="color: black; font-family: Consolas;"> args)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span style="color: green; font-family: Consolas;">// Copy a reference to the delegate field into a temp var for thread safety</span><span style="color: black; font-family: Consolas;"><o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span style="color: #2b91af; font-family: Consolas;">EventHandler</span><span style="color: black; font-family: Consolas;"><</span><span style="color: #2b91af; font-family: Consolas;">TriggerCompletedEventArgs</span><span style="color: black; font-family: Consolas;">> temp = </span><span class="GramE"><span style="color: #2b91af; font-family: Consolas;">Interlocked</span><span style="color: black; font-family: Consolas;">.CompareExchange(</span></span><span style="color: blue; font-family: Consolas;">ref</span><span style="color: black; font-family: Consolas;"> TriggerCompletedEvent, </span><span style="color: blue; font-family: Consolas;">null</span><span style="color: black; font-family: Consolas;">, </span><span style="color: blue; font-family: Consolas;">null</span><span style="color: black; font-family: Consolas;">);<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> </span><span class="GramE"><span style="color: blue; font-family: Consolas;">if</span></span><span style="color: black; font-family: Consolas;"> (temp != </span><span style="color: blue; font-family: Consolas;">null</span><span style="color: black; font-family: Consolas;">)<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> {<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> <span class="GramE">temp(</span></span><span style="color: blue; font-family: Consolas;">this</span><span style="color: black; font-family: Consolas;">, <span class="SpellE">args</span>);<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;"> }<o:p></o:p></span></pre><pre style="background: white;"><span style="color: black; font-family: Consolas;">}<o:p></o:p></span></pre><div class="MsoNormal"><br />
</div><br />
</div></code>Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com0tag:blogger.com,1999:blog-8094588573435715294.post-72303423972227996992011-03-02T19:57:00.000-08:002011-03-02T20:15:01.000-08:00Strong Name Key - Access DeniedAfter rebuilding my machine a few weeks ago, once again I find myself running into old problems and trying to remember how to repair them. This time, generating keys to strongly name my asesmblies through the Signing tab in Visual Studio 2008. I thought I would share it this time in case others have seen this problem...and struggled with it...<br />
<br />
<b>The Scenario</b>:<br />
<br />
For a Windows client application, open the Properties for the project, navigate to the Signing tab, check Sign the assembly and create a new key. In the Create Strong Name Key dialog, provide a new key name, provide a password, and click "OK". <br />
<br />
<b>The Problem:<br />
</b><br />
An error message is presented: Create strong name key the operation could not be completed. Access is denied.<br />
<br />
The problem repeats itself when I tried to use the strong name utility (sn.exe), with this error: Failed to generate strong name key pair. Access is denied.<br />
<br />
<b>The Solution:<br />
</b><br />
I had to give my user account access to the key container in C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys. This is because you need to access the key store to create a strong name key. Modifying permissions did not work in my case, so I needed to reset the location of my key store. This can be done by opening the Visual Studio Command Prompt as an <b>Administrator</b> (right click on the start menu - run as Administrator). Reset the key store by typing the command:<br />
sn.exe -c<br />
<br />
<b>How does it work?<br />
</b><br />
Each container created using sn.exe -i is located in the MachineKeys directory (unless you specify elsewhere). The default key container that is used by sn.exe is also in that location. <br />
<br />
In the event you reset your key container to a new one, and forget where it is...you can reset the key container for the strong name utility using sn.exe -c. So, if the account access fix doesn't work, you may be using an alternate key store so a reset may be in order.<br />
<br />
I googled this topic a bit before writing this blog, and was surprised that very little has been written on this subject for a solution...furthermore...many people actually rebuilt their machines to solve the problem!!!! I hope this blog entry prevents a few more of those!!!Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com0tag:blogger.com,1999:blog-8094588573435715294.post-67256655418092370282011-02-04T21:24:00.000-08:002011-02-04T22:19:35.709-08:00Volatile Keyword and Memory BarriersThe volatile keyword instructs the compiler to generate an acquire-fence on every read from that field, and a release-fence on every write to that field. An acquire-fence prevents other reads/writes from being moved before the fence; a release-fence prevents other reads/writes from being moved after the fence. <br />
<br />
Intel’s processors always apply acquire-fences to reads and release-fences to writes — whether or not you use the volatile keyword — so this keyword has no effect on the hardware if you’re using these processors. However, volatile does have an effect on optimizations performed by the compiler and the CLR — as well as on 64-bit AMD. This means that you cannot be more relaxed by virtue of your clients running a particular type of CPU.<br />
<br />
The effect of applying <code>volatile </code>to fields can be summarized as follows:<br />
<br />
<table border="1" cellpadding="0" cellspacing="0"><tbody>
<tr><th valign="top">First instruction</th><th valign="top">Second instruction</th><th valign="top">Can they be swapped?</th></tr>
<tr><td valign="top">Read</td><td valign="top">Read</td><td valign="top">No</td></tr>
<tr><td valign="top">Read</td><td valign="top">Write</td><td valign="top">No</td></tr>
<tr><td valign="top">Write</td><td valign="top">Write</td><td valign="top">No (The CLR ensures that write-write operations are never<br />
swapped, even without the <code>volatile</code> keyword)</td></tr>
<tr><td valign="top">Write</td><td valign="top">Read</td><td valign="top"><strong>Yes!</strong></td></tr>
</tbody></table><br />
<br />
Notice that applying volatile doesn’t prevent a write followed by a read from being swapped, and this can create brainteasers. Joe Duffy illustrates the problem well with the following example: if Test1 and Test2 run simultaneously on different threads, it’s possible for a and b to both end up with a value of 0 (despite the use of volatile on both x and y): <br />
class MyVolatile<br />
{<br />
volatile int x, y;<br />
<br />
void Test1() // Executed on one thread<br />
{<br />
x = 1; // Volatile write (release-fence)<br />
int a = y; // Volatile read (acquire-fence)<br />
}<br />
<br />
void Test2() // Executed on another thread<br />
{<br />
y = 1; // Volatile write (release-fence)<br />
int b = x; // Volatile read (acquire-fence)<br />
}<br />
}<br />
The MSDN documentation states that use of the volatile keyword ensures that the most up-to-date value is present in the field at all times. This is incorrect, since as we’ve seen, Joe Duffy's example shows that a write followed by a read can be reordered.Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com0tag:blogger.com,1999:blog-8094588573435715294.post-21578175979522560692011-01-11T20:41:00.000-08:002011-01-24T19:20:34.402-08:00Realtime log tracing with log4net using System.ConsoleI have a project that requires logging information to a text file (and possibly email at a later date). I decided to look into log4net as I heard many praises about the library. Within 15 minutes of reading the following tutorial by Tim Corey at CodeProject.com, I was able to start using the tool. Tim's article is a great "Quick Start" tutorial to get you up and running without fail. <br />
<a href="http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx">http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx</a><br />
<br />
There was one problem I found while fiddling with the project. When an error was logged, I needed to find and open the log file to view the error. What I needed was realtime output of the errors on the console. Tim, in his article shows how to log to the Output window using a ConsoleAppender, but he does not discuss how to view the errors in a console window for easy and obvious reading (nor does the log4net docs tell you how to do this - not that I found anyway).<br />
<br />
I knew that there was a way to redirect output from the Output window (Output/Trace/Debug Window) to the System.Console. So I had to dust off a book from my bookshelf to come up with the an extremely simple way to provide realtime errors in your console applications. The code boils down to 2 lines shown here:<br />
<pre style="font-family: consolas;"><span style="color: #2b91af;">TextWriterTraceListener</span> myWriter = <span style="color: blue;">new</span> <span style="color: #2b91af;">TextWriterTraceListener</span>(System.<span style="color: #2b91af;">Console</span>.Out);
<span style="color: #2b91af;">Debug</span>.Listeners.Add(myWriter);</pre><br />
<br />
To make those lines work with log4net, it is required that you set up your app.config with a TraceAppender as follows:<br />
<br />
<pre style="font-family: consolas;"><span style="color: blue;"> <</span><span style="color: #a31515;">log4net</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">root</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">level</span><span style="color: blue;"> </span><span style="color: red;">value</span><span style="color: blue;">=</span>"<span style="color: blue;">DEBUG</span>"<span style="color: blue;">/></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">appender-ref</span><span style="color: blue;"> </span><span style="color: red;">ref</span><span style="color: blue;">=</span>"<span style="color: blue;">TraceAppender</span>"<span style="color: blue;">/></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">root</span><span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">appender</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">TraceAppender</span>"<span style="color: blue;"> </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">log4net.Appender.TraceAppender</span>"<span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">layout</span><span style="color: blue;"> </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">log4net.Layout.PatternLayout</span>"<span style="color: blue;">></span>
<span style="color: blue;"> <</span><span style="color: #a31515;">conversionPattern</span><span style="color: blue;"> </span><span style="color: red;">value</span><span style="color: blue;">=</span>"<span style="color: blue;">%-5level %logger - %message%newline</span>"<span style="color: blue;"> /></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">layout</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">appender</span><span style="color: blue;">></span>
<span style="color: blue;"> </</span><span style="color: #a31515;">log4net</span><span style="color: blue;">></span></pre><br />
<br />
<span style="font-family: inherit;">That's all there is to getting realtime logging info in you console apps without the need to open log files or query your IDE. I find it useful for testing libraries that will eventually be included in a windows service. </span><br />
<br />
<span style="font-family: inherit;">Below is some sample code. </span><br />
<pre style="font-family: consolas;"><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">TestWritingLogToConsole</span>
{
<span style="color: blue;">private</span> <span style="color: blue;">static</span> <span style="color: blue;">readonly</span> log4net.<span style="color: #2b91af;">ILog</span> log
= log4net.<span style="color: #2b91af;">LogManager</span>.GetLogger(System.Reflection.<span style="color: #2b91af;">MethodBase</span>.GetCurrentMethod().DeclaringType);
<span style="color: blue;">public</span> TestWritingLogToConsole()
{
log.Info(<span style="color: #a31515;">"You should see this text in a System.Console window."</span>);
}
}
<span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Program</span>
{
<span style="color: blue;">static</span> <span style="color: blue;">void</span> Main(<span style="color: blue;">string</span>[] args)
{
<span style="color: #2b91af;">TextWriterTraceListener</span> myWriter = <span style="color: blue;">new</span> <span style="color: #2b91af;">TextWriterTraceListener</span>(System.<span style="color: #2b91af;">Console</span>.Out);
<span style="color: #2b91af;">Debug</span>.Listeners.Add(myWriter);
System.Diagnostics.<span style="color: #2b91af;">Trace</span>.WriteLine(<span style="color: #a31515;">"Trace Started."</span>);
<span style="color: #2b91af;">TestWritingLogToConsole</span> test = <span style="color: blue;">new</span> <span style="color: #2b91af;">TestWritingLogToConsole</span>();</pre><pre style="font-family: consolas;"> <span style="color: #2b91af;">Console</span>.WriteLine(<span style="color: #a31515;">"End Program!"</span>);
<span style="color: #2b91af;">Console</span>.Read();
}
}</pre>Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com1tag:blogger.com,1999:blog-8094588573435715294.post-24166662808619792602011-01-09T21:57:00.000-08:002011-01-09T21:59:28.724-08:00Virtual PC - Using Hard Disk 2When you add a second hard disk to your Virtual PC, you may notice that the drive does not show in My Computer. The reason the drive is not recognized is because the volume has not been formatted. To format the drive open up the Computer Management console (Start >> Control Panel >> Administrative Tools >> Computer Management). When you click on Disk Management in the tree on the left, a wizard will pop up. Follow the instructions, noting that the new drive is called Disk 1 (the C: drive is Disk 0). Once the wizard is complete, right click on the new partition and select Add New Volume. Follow the instructions shown in the wizard and your second hard drive will be ready to use.Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com0tag:blogger.com,1999:blog-8094588573435715294.post-1337568538390218512011-01-08T00:06:00.000-08:002011-01-08T00:15:34.629-08:00Reactive ExtensionsI've been researching Reactive Extensions and have found that the best tutorial I've encountered so far is at the site listed below. The "hands on lab" provides you with a sound foundation on which to build/design your own ideas. Here is the link<br />
<a href="http://blogs.msdn.com/b/rxteam/archive/2010/07/15/rx-hands-on-labs-published.aspx">http://blogs.msdn.com/b/rxteam/archive/2010/07/15/rx-hands-on-labs-published.aspx</a><br />
<br />
Search Google for "Reactive Extensions hands on lab" if the link above expires.Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com0tag:blogger.com,1999:blog-8094588573435715294.post-69876965303153036382011-01-07T23:35:00.000-08:002011-01-07T23:36:55.337-08:00Fathom ThisFathom how savvy you can become.Fathom Savvyhttp://www.blogger.com/profile/07856938357162927157noreply@blogger.com0