<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Rob Gray</title>
        <link>http://geekswithblogs.net/rgray/Default.aspx</link>
        <description />
        <language>en-AU</language>
        <copyright>Robert Gray</copyright>
        <managingEditor>rob@ragware.net</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Rob Gray</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/rgray/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Why should Acceptance Tests be signed off with formal Requirements?</title>
            <link>http://geekswithblogs.net/rgray/archive/2009/03/12/why-should-acceptance-tests-be-signed-off-with-formal-requirements.aspx</link>
            <description>&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	Under most models of software development of any
significant scale, user sign-off of requirements is a must before the development
can continue.  Even agile methodologies that involve a customer representative in
the development team needs to have a set of at least significantly complete
requirements before development can begin.&lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	 &lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	Requirements form the basis for generating a Tender or Quote
and help generate a Statement of Works.  Detailed requirements are often
elicited during contract negotiations and once established, a fixed price can
be agreed (if that is the model being used). Requirements sign-off is all
important in formally contracting what needs to be provided in any software
project deliverable.  It is the signed requirements document that is brought
out when there is confusion about items being in or out of scope, and
determining if a product has been completed.  &lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	 &lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	A hopefully typical contract stipulates that software is “done”
when all Acceptance Tests have passed.   Although our contracts often stipulate
that once all sites are Live the software has been accepted and the project is “done”,
though in my experience this is painful because reasons for not going Live are
quite often more political than technical or caused by any software defect, and
it’s these situations where Acceptence Test success would greatly speed up the “Done”
state of a project (and the “paid” state of the Invoice).&lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	 &lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;My company traditionally produces an “Operational Scenarios
Document” (OSD) as the document indicating the requirements and to be signed
off the customer.  The OSD is simply a document containing all the user stories
or use cases of the system to be built.  I believe this presents a more
understandable view of the system to the customer, as it’s written in their language. 
From the OSD Analysts produce a more engineering oriented “Software Requirements
Document” (SRD), where the OSD is broken down into hundreds and thousands of numbers
system requirements.&lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;The problem with this approach is the OSD only captures user
facing actions such as steps in a business process.  It is up to the SRD to
capture the more fine grained requirements, such as “Patient information shall
include a valid Medicare number in the format XXXX-XXXX-XXXX X”.  As such, we’ve
captured the necessary requirement, but there’s nothing to formal (read “legal”)
to cover either us or the customer.  Generally this isn’t a problem, but we’ve probably
all experienced scope-creep and ambiguous (signed) requirements are the genesis
of scope creep.&lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	Enter signed Acceptance Tests and Acceptance Test Driven
Development (TDD at a higher abstraction).  Acceptance Tests define exactly
what the system has to do before the customer will consider it “Done”. 
Acceptance Tests don’t just include functional requirements; they also test the
non-functional stuff like performance, security, and useability.  If functionally
is not covered by the Acceptance Tests, it’s not required by the customer.&lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	 &lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	Now, I’m not saying that no software project should be
undertaken before Acceptance Tests are supplied.  That’s clearly unworkable in
all but the situations where the customer team has experienced analysts, with a
good understanding of the software development process, on board.  What I do
think is that an analyst or developer should always be mindful of Acceptance
Tests when eliciting requirements from customers during workshops.  Questions like
“What are the steps you take when placing an order” are not enough.  “What
state will the order be in once it has been successfully placed?”, or “What
happens if an order is placed and there is not enough inventory to fulfil it?”
are necessary. Hopefully these are already questions that are being asked as
part of the user story generation.  &lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	The differences between Acceptance Tests and Use Cases
(or OSD’s) are small but significant.  Where an OSD is used by the customer to
accept that you understand the requirements of the software under design,
Acceptance Tests are used by customer to determine if you supplied what they
asked for.  Both OSD and Acceptance Test Document can be generated from the
same information at the same time, so it makes sense to generate them at the
same time and include both in any formal signed requirements.&lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	 &lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	From a development perspective, you can use user stories/user
cases/operation scenarios in tandem with acceptance tests to define the use
cases to be developed in each iteration, producing software that is of business
use after iteration one and the customer can hook into the feedback loop early
in a project.&lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	 &lt;/p&gt;

&lt;p style="margin:0cm; margin-bottom:.0001pt; font-size:11.0pt;font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;	Critically, Acceptance Tests are generally customer
supplied artefacts and as such, you as a developer have a higher level of
confidence that developing a system to meet Acceptance Tests will result in a successful
project.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130026"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130026" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rgray/aggbug/130026.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Gray</dc:creator>
            <guid>http://geekswithblogs.net/rgray/archive/2009/03/12/why-should-acceptance-tests-be-signed-off-with-formal-requirements.aspx</guid>
            <pubDate>Thu, 12 Mar 2009 16:38:32 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rgray/comments/130026.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rgray/archive/2009/03/12/why-should-acceptance-tests-be-signed-off-with-formal-requirements.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/rgray/comments/commentRss/130026.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rgray/services/trackbacks/130026.aspx</trackback:ping>
        </item>
        <item>
            <title>Turning an Asynchronous call into a Synchronous call</title>
            <link>http://geekswithblogs.net/rgray/archive/2009/01/29/turning-an-asynchronous-call-into-a-synchronous-call.aspx</link>
            <description>&lt;div&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;strong&gt;&lt;u&gt;Scenario/History&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;There is a bug in our Premise Utility that causes streetid’s to be set to 0 whenever the an existing premise record is saved.  StreetId’s are integral to accurate location information when dispatching ambulances, so getting a fix done was high on the agenda.  The problem is that for whatever reason the bug cannot immediately be fixed in the Premise Utility.  I am instead creating a small app that will be notified when a premise record change an perform a reverse geo code on the supplied latitude and longitude to obtain a streetid and update the premise record.&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;strong&gt;&lt;u&gt;What did I do?&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;The existing .NET Reverse GeoCode component inherits from System.Windows.Forms and contains an old VB OCX that performs the logic (we’re still in process of converting rather our large code base from VB6/C++ to .NET).  This component is designed to be called from a Windows Forms app, where the user enters the Latitude and Longitude and waits for a response, which is returned by an Event to the caller:&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: blue; FONT-SIZE: 10pt"&gt;private&lt;/span&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; button1_Click(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; geo = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ReverseGeovalidator&lt;/span&gt;(100);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    geo.ReverseGeovalidationComplete += &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ReverseGeovalidator&lt;/span&gt;.&lt;span style="COLOR: #2b91af"&gt;ReverseGeovalidationEventHandler&lt;/span&gt;(geo_ReverseGeovalidationComplete);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; latitude = 62531667;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; longitude = 26988333;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    geo.ReverseGeovalidate(latitude, longitude);            &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: blue; FONT-SIZE: 10pt"&gt;void&lt;/span&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; geo_ReverseGeovalidationComplete(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;ReverseGeovalidationEventArgs&lt;/span&gt; eventArgs)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: green"&gt;// Populate the form with the data received from eventArgs&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;My application needed to run unattented (Window Service), monitoring the IPC server for notifications that a Premise had changed.  This meant no windows form and no waiting around for a display to be populated.  &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;I needed my application to accept a geo-coordinate and process reverse geo-code synchronously, so I could associated the resultant streetid with the premise id of the changed premise and then commit to the database.&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;My original thinking was to use ManualResetEvents.WaitOne() to block the caller until the event handler had been called and I could call ManualResetEvents.Set() to continue the operation.&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: blue; FONT-SIZE: 10pt"&gt;public&lt;/span&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCoder&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt; geoDone;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: #2b91af"&gt;ReverseGeovalidationEventArgs&lt;/span&gt; data;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; GeoCoder() &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoDone = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;);                       &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; ReverseGeoCode(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; latitude, &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; longitude)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoDone.Reset();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; geo = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ReverseGeovalidator&lt;/span&gt;(1500);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geo.ReverseGeovalidationComplete += &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ReverseGeovalidator&lt;/span&gt;.&lt;span style="COLOR: #2b91af"&gt;ReverseGeovalidationEventHandler&lt;/span&gt;(geo_ReverseGeovalidationComplete);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geo.ReverseGeovalidate(latitude, longitude);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoDone.WaitOne();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (data != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; data.StreetID;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; 0;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; geo_ReverseGeovalidationComplete(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;ReverseGeovalidationEventArgs&lt;/span&gt; eventArgs)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        data = eventArgs;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoDone.Set();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;The problem I found was that my unit test would lockup. &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;(Oh yeah, here’s the test)&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;[&lt;span style="COLOR: #2b91af"&gt;TestMethod&lt;/span&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: blue; FONT-SIZE: 10pt"&gt;public&lt;/span&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ReverseGeoCodeTest()&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;{                            &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; gc = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCoder&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; latitude = 62531667;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; longitude = 26988333;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; streetId = gc.ReverseGeoCode(latitude, longitude);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(275535, streetId);&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;After a little bit of pondering I realised that geoDone.WaitOne() is blocking on the current thread, which is the same thread the event handler is on.  Result? The event handler will never get called.&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;I needed to put the event handler a separate thread, so it would eventually get called?  But How?&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;After a bit of playing around, I decided (realised?) to put the entire lot on a worker thread, a la Command Pattern.  I created a test Geo Processor that is essentially a job queue that co-ordinates off the queue every 2 seconds and processes them, returning the results when done.&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: blue; FONT-SIZE: 10pt"&gt;public&lt;/span&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoProcessor&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCodeEventHandler&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;GeoCodeEventArgs&lt;/span&gt; e);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;GeoCoordinate&lt;/span&gt;&amp;gt; workQueue;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;event&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCodeEventHandler&lt;/span&gt; GeoCodeEventCompleted;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: green"&gt;// Timer will pull Coordinates off the work queue and process them.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    System.Timers.&lt;span style="COLOR: #2b91af"&gt;Timer&lt;/span&gt; workTimer;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; GeoProcessor() &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        workQueue = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;GeoCoordinate&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        workTimer = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; System.Timers.&lt;span style="COLOR: #2b91af"&gt;Timer&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        workTimer.Elapsed +=&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ElapsedEventHandler&lt;/span&gt;(workTimer_Elapsed);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        workTimer.Interval = 2000;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: green"&gt;// Pulls items from the queue and processes.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;void&lt;/span&gt;  workTimer_Elapsed(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;ElapsedEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        workTimer.Stop();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (workQueue.Count &amp;gt; 0)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; coord = workQueue.Dequeue();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: green"&gt;// Do some processing here&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: green"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: green; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: green"&gt;// Raise event to notify subscriber that work is done.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            OnGeoCodeComplete(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCodeEventArgs&lt;/span&gt;(275535));&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (workQueue.Count &amp;gt; 0) workTimer.Start();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        }            &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: green"&gt;// Queues the coordinate up for processing in the work queue&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; QueueGeo(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; latitude, &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; longitude)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        workQueue.Enqueue(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCoordinate&lt;/span&gt; { Latitude = latitude, Longitude = longitude });&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        workTimer.Start();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; OnGeoCodeComplete(&lt;span style="COLOR: #2b91af"&gt;GeoCodeEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (GeoCodeEventCompleted != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            GeoCodeEventCompleted(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;, e);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;Below is the EventArgs sub class I use to pass the “processed” information back, along with the geo coordinate class.&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: blue; FONT-SIZE: 10pt"&gt;public&lt;/span&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCodeEventArgs&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;EventArgs&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; streetId;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; GeoCodeEventArgs(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; streetId)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.streetId = streetId;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; StreetId&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.streetId; }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: blue; FONT-SIZE: 10pt"&gt;public&lt;/span&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCoordinate&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Latitude { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Longitude { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;This is my command pattern implementation that will run on a separate worker thread and call the GeoProcessor.&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: blue; FONT-SIZE: 10pt"&gt;internal&lt;/span&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoWorker&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;{    &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: #2b91af"&gt;GeoCoder&lt;/span&gt; geoCoder;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; latitude;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; longitude;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; GeoWorker(&lt;span style="COLOR: #2b91af"&gt;GeoCoder&lt;/span&gt; geoCoder, &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; latitude, &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; longitude)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {                &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.latitude = latitude;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.longitude = longitude;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.geoCoder = geoCoder;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Process()&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; geo = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoProcessor&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geo.GeoCodeEventCompleted += &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoProcessor&lt;/span&gt;.&lt;span style="COLOR: #2b91af"&gt;GeoCodeEventHandler&lt;/span&gt;(geo_GeoCodeEventCompleted);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geo.QueueGeo(latitude, longitude);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; geo_GeoCodeEventCompleted(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;GeoCodeEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoCoder.Data = e;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoCoder.GeoDone.Set();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }    &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;My GeoCoder class is now only responsible for starting the worker thread that will call the GeoProcessor and then waiting for the reset event to be set.  Once set (when the worker handles the event from the GeoProcessor and calls Set() on the shared Reset Event) GeoCoder can continue.&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; COLOR: blue; FONT-SIZE: 10pt"&gt;public&lt;/span&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCoder&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt; geoDone;               &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: #2b91af"&gt;Thread&lt;/span&gt; geoWorkerThread;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; latitude;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; longitude;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; GeoCoder()&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoDone = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;);       &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoCodeEventArgs&lt;/span&gt; Data { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt; GeoDone { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; ReverseGeoCode(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; latitude, &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; longitude)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.latitude = latitude;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.longitude = longitude;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        GeoDone.Reset();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoWorkerThread = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Thread&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ThreadStart&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.CallGeoWorker));&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoWorkerThread.Name = &lt;span style="COLOR: #a31515"&gt;"Reverse Geo Code Worker"&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoWorkerThread.SetApartmentState(&lt;span style="COLOR: #2b91af"&gt;ApartmentState&lt;/span&gt;.STA);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoWorkerThread.Start();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        GeoDone.WaitOne();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (Data != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; Data.StreetId;           &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; 0;&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; CallGeoWorker()&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; geoWorker = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeoWorker&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;, latitude, longitude);&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;        geoWorker.Process();&lt;/span&gt;&lt;/p&gt;
&lt;p style="LINE-HEIGHT: normal; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;&lt;span style="FONT-FAMILY: &amp;quot;Courier New&amp;quot;; FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;The asynchronous (event) call has now been turned into synchronous. &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;The biggest problem is the showstopper though.  COM doesn’t play well using this model, thanks to it’s STA threading (I believe) and the event handler never gets called.  &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt;Overall a great learning experience, but I still can’t call the COM wrapper object synchronously and now, admitting defeat, I am rolling my own class to calculate the StreetId. &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt; FONT-FAMILY: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; FONT-SIZE: 11pt"&gt; &lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129056"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129056" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rgray/aggbug/129056.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Gray</dc:creator>
            <guid>http://geekswithblogs.net/rgray/archive/2009/01/29/turning-an-asynchronous-call-into-a-synchronous-call.aspx</guid>
            <pubDate>Thu, 29 Jan 2009 20:29:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rgray/comments/129056.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rgray/archive/2009/01/29/turning-an-asynchronous-call-into-a-synchronous-call.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/rgray/comments/commentRss/129056.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rgray/services/trackbacks/129056.aspx</trackback:ping>
        </item>
        <item>
            <title>When it rains it pours</title>
            <link>http://geekswithblogs.net/rgray/archive/2008/12/11/when-it-rains-it-pours.aspx</link>
            <description>2008 the SDSI work year was pretty quiet.  Most of our energies were turned toward getting all sites live ASAP being able to concentrate on chasing other contracts, with QAS/QFRS live.  Engineering work was pretty minimal, except for the occasional bug fix or new feature driven by changing business requirements.    We had responded to requests for tender on a few other projects which would have given us a constant flow of work for the second half of year.  Unfortunately the timing was right and the work kept getting bumped back.

Finally, two weeks ago three of the jobs came in in the same week, all needing their work done by the end of Q1 2009.  Not too much problem, we’d been pretty quiet anyway.  I went out to the recruitment agencies and got two more engineers onboard to handle the extra work.  

Yesterday we had a meeting with one of our big clients, who has another large IT project on the go, about to wrap up.  This multi-million dollar project going live is contingent upon successful integration with our CAD system.  Their deadline?  End of Q1 2009.  All I could say was LOL, and immediately got on to seeking more developers.

There’s an absolutely huge announcement on Monday night, which if swings in our favour, will see our engineering team double again.  We’re also chasing a federal grant that will give us the funding we need to re-engineer one of our products from the ground up, adding a few more devs to the team.

Whilst it’s fantastic news and sure beats being bored all day, I can’t help but ponder on why does work always seem to come in at once?  We’re not in a segment that revolves around particular dates, like if we were in the financial sector and end of financial year was looming.  

Here’s looking forward to a ground breaking 2009.  I go on leave in a week.  My first leave this year and to be honest, even though I’ve worked 70 hour weeks for the last 12 months, I’m so pumped I don’t want to holiday.  

*sigh*  

&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127807"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127807" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rgray/aggbug/127807.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Gray</dc:creator>
            <guid>http://geekswithblogs.net/rgray/archive/2008/12/11/when-it-rains-it-pours.aspx</guid>
            <pubDate>Fri, 12 Dec 2008 01:18:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rgray/comments/127807.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rgray/archive/2008/12/11/when-it-rains-it-pours.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/rgray/comments/commentRss/127807.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rgray/services/trackbacks/127807.aspx</trackback:ping>
        </item>
        <item>
            <title>Career Advancement for Developers</title>
            <link>http://geekswithblogs.net/rgray/archive/2008/09/10/career-advancement-for-developers.aspx</link>
            <description> 
&lt;p&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;One of the big challenges any developer faces is knowing how to successfully progress up the ladder.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;What do we do to make ourselves stand out, and how do we get the skills we need to move to the next level.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;For me, this is a problem.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Thus far in my career, I’ve relied on what I consider the most important attribute: hard work.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;I believe the best way to get noticed and promoted is to finish projects on time (insomuch as we can control these things &lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Wingdings; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;) and as defect free as possible.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Then, rather than relax, go chase more work.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Help others out.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;I don’t think it’s long hours, and I don’t look for long hours in my developers, people need balanced lives to be happy and effective. When I allocate work, I do so based on an 8 hour day, or at least what I think can be accomplished in an 8 hours day, even if I’ve been told on more than one occasion by people senior to me that I work faster than most.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;If you need to work 2 extra hours a day to keep up, you need to either work smarter or get more skilled.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Perhaps both.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;The career path for a develop goes pretty much like&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;em&gt;Developer -&amp;gt; Developer Lead -&amp;gt; Solution Architect -&amp;gt; Enterprise Architect -&amp;gt; (Development Manager) -&amp;gt; CIO.&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;I’ve put Development Manager in parenthesis because in my experience as Development Lead, Development Lead performs resources scheduling activites and high level oversight roles too. At least, in my small company, I’m the Development Lead and the Development Manager and Solution Architect in one.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Hell, I’m also a Developer.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;So there’s a glaring Caveat, the career path depends on the company you work work.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Another thing I’ve noticed is Developers will seek promotion to get paid more.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Many bosses consider promotion to be management, so will promote good programmer to Managers, where they may make really bad managers.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;There’s something called the Peter Principle, go check it out &lt;a href="http://en.wikipedia.org/wiki/The_Peter_Principle"&gt;http://en.wikipedia.org/wiki/The_Peter_Principle&lt;/a&gt; .&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125053"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125053" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rgray/aggbug/125053.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Gray</dc:creator>
            <guid>http://geekswithblogs.net/rgray/archive/2008/09/10/career-advancement-for-developers.aspx</guid>
            <pubDate>Thu, 11 Sep 2008 00:43:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rgray/comments/125053.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rgray/archive/2008/09/10/career-advancement-for-developers.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/rgray/comments/commentRss/125053.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rgray/services/trackbacks/125053.aspx</trackback:ping>
        </item>
        <item>
            <title>Introduction</title>
            <link>http://geekswithblogs.net/rgray/archive/2008/08/30/introduction.aspx</link>
            <description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri" size="3"&gt;As this is my first post in this blog, it’s probably best I introduce myself. &lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;I’m Rob Gray, a team lead at Spectrum Data Systems International (&lt;/font&gt;&lt;a href="http://www.sdsi.com.au/"&gt;&lt;font face="Calibri" size="3"&gt;http://www.sdsi.com.au&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri" size="3"&gt;).&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;We are the Australasian vendor Tritech’s (&lt;/font&gt;&lt;a href="http://www.tritech.com"&gt;&lt;font face="Calibri" size="3"&gt;http://www.tritech.com&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri" size="3"&gt;) VisiCAD computer aided dispatch system for emergency services.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri" size="3"&gt;We’re a small team but we’re passionate about what we do.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Being a small team, from time to time we all get wear different hats. One day I’ll be developing, another I’ll be supporting a customer, and another I’ll be onsite&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;gathering requirements or attending high-level management meetings.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;I think that’s fairly typical of how small companies operate.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;I also own my own software dev business, RG Software Solutions, which I work on the side with (paid) help from a friend and former colleague.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;We’re developing mobile and satellite phone contract management software.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;o:p&gt;&lt;font face="Calibri" size="3"&gt;I've described myself as a .NET journeyman because I feel I'm no where near the expert I want to be, but I've completed university studies and a few certifications from Microsoft.  I marvel at the awesomeness of so many .NET people out there and I don't feel I'm up to their level.  But I am constant learning and trying new things, so hopefully one day...&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;We just received our new Dell PowerEdge T300 servers this week.&lt;span style="mso-spacerun: yes"&gt;   &lt;/span&gt;We’ve got four, two for support and two for development.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Our lab currently has numerous old machines, with specifications and limited as PII 350Mhz CPU’s up to Xeon 2.6Ghz Quad Core Stratus servers.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;The PowerEdge’s will replace the older spec machines we’ve had for the last 5 years.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;font face="Calibri" size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri" size="3"&gt;Another benefit of having these machines is that each department can now run multiple virtual machines on each of them.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;This will allow us to replicate production environments at customer sites more readily; &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;at least the database servers.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;One of the biggest frustrations we’ve had over the last few years is having to spend 30 mins configure and setup when changing servers.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Because machines were in short supply some servers were playing host to multiple CAD server configurations,&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;each running different versions of CAD, not just different data. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;o:p&gt;&lt;font face="Calibri" size="3"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Another improvement by way of Virtual Machines is the use of Virtual development environments. We’ll now have a dev VM for each different client.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;This VM will contain the basic dev tools, VS 2003, VS 2008, VB 6, and Sql Server tools, along with reflector and TestDriven.NET .&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;It was only today that one my of co-works, Kevin, voiced his frustration with the delays in work brought on by having to configure different environments.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;On the RGSS front, I picked up&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;a “new” server last week so I could move the server out of a VM (it had lived on my media centre!)&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;to it’s own machine.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Took me a while to get the thing up and running, thanks to peculiarities with the Dlink DSL-502T router I’m using here.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Seemed it would lose the port forwarding if using a static ip.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;I changed the ip back to DHCP assigned but tied to the MAC address, and it worked again.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124793"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124793" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/rgray/aggbug/124793.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Robert Gray</dc:creator>
            <guid>http://geekswithblogs.net/rgray/archive/2008/08/30/introduction.aspx</guid>
            <pubDate>Sat, 30 Aug 2008 05:37:13 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/rgray/comments/124793.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/rgray/archive/2008/08/30/introduction.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/rgray/comments/commentRss/124793.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/rgray/services/trackbacks/124793.aspx</trackback:ping>
        </item>
    </channel>
</rss>