<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Pedram Rezaei's Ramblings : WF</title><link>http://blogs.msdn.com/pedram/archive/tags/WF/default.aspx</link><description>Tags: WF</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Windows Workflow Foundation (Basics): How to handle external events and to trigger state transitions using a HandleExternalEvent activity</title><link>http://blogs.msdn.com/pedram/archive/2006/12/22/windows-workflow-foundation-basics-how-to-handle-external-events-and-to-trigger-state-transitions-using-a-handleexternalevent-activity.aspx</link><pubDate>Fri, 22 Dec 2006 19:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1348974</guid><dc:creator>pedramr</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/pedram/comments/1348974.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pedram/commentrss.aspx?PostID=1348974</wfw:commentRss><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;MSDN's description for a &lt;B&gt;HandleExternalEvent&lt;/B&gt; reads as "Defines a workflow communication activity that is used to handle an event that is raised by a local service". In this blog I will try to expand on that definition. &lt;/P&gt;
&lt;P&gt;Imagine a&amp;nbsp;simple state machine representing&amp;nbsp;a moving (state = &lt;B&gt;Moving&lt;/B&gt;)&amp;nbsp;or&amp;nbsp;non-moving (state = &lt;B&gt;Stopped&lt;/B&gt;)&amp;nbsp;vehicle.&amp;nbsp;For simplicity, let's assume that the vehicle can only start moving if the driver accelerates and it stops when the brakes are applied: 
&lt;P&gt;&lt;A href="http://tk3.storage.msn.com/x1pqP5noGPWAA6f9f2eD5gmGer3V6BAg1RAPI_-cll46EWBuzNoPatBSOLVnLarzE7qfTqmxNJeg28iN_lh62-qNIKjBV9mkoDypmL1ad1frXun-gXvVIoSGDw9rmZJqvqyrKOxK7-3s2RmmtAJ5NDJbA" mce_href="http://tk3.storage.msn.com/x1pqP5noGPWAA6f9f2eD5gmGer3V6BAg1RAPI_-cll46EWBuzNoPatBSOLVnLarzE7qfTqmxNJeg28iN_lh62-qNIKjBV9mkoDypmL1ad1frXun-gXvVIoSGDw9rmZJqvqyrKOxK7-3s2RmmtAJ5NDJbA"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=240 src="http://tk3.storage.msn.com/x1pqP5noGPWAA6f9f2eD5gmGer3V6BAg1RAPI_-cll46EVCYqIbTC9a4BV7s9Ca3jL7s1JrHD7JALmsU7AYBo_ATUSWSVErJBw_1KGeqvuAcUAJe1s9GuEaOINuap2o7MiTGDhZrEK2SnKcFIpmRFGTjg" width=234 border=0 mce_src="http://tk3.storage.msn.com/x1pqP5noGPWAA6f9f2eD5gmGer3V6BAg1RAPI_-cll46EVCYqIbTC9a4BV7s9Ca3jL7s1JrHD7JALmsU7AYBo_ATUSWSVErJBw_1KGeqvuAcUAJe1s9GuEaOINuap2o7MiTGDhZrEK2SnKcFIpmRFGTjg"&gt;&lt;/A&gt; 
&lt;P&gt;WF's state machine runtime allows services to raise events which can be handled by the state machine. In other words, a local service could perhaps communicate with a state machine via this route. 
&lt;P&gt;Let’s create a simple service project which will allow us to raise both the &lt;I&gt;accelerate&lt;/I&gt; and &lt;I&gt;brake&lt;/I&gt; events: 
&lt;P&gt;- Create an empty class library called &lt;B&gt;VehicleService&lt;BR&gt;&lt;/B&gt;- Inherit from &lt;B&gt;ExternalDataEventArgs&lt;/B&gt; and mark the inherited class as serializable (it must be marked as serializable in order to be sent to the state machine): &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;SPAN style="COLOR: teal"&gt;Serializable&lt;/SPAN&gt;]&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;MovementChangeEventArgs&lt;/SPAN&gt; : &lt;SPAN style="COLOR: teal"&gt;ExternalDataEventArgs&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;FONT color=#333333&gt;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;MovementChangeType&lt;/SPAN&gt; _movementChangeType;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;MovementChangeType&lt;/SPAN&gt; MovementChangeType&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt; { &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; _movementChangeType; }&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt; { _movementChangeType = &lt;SPAN style="COLOR: blue"&gt;value&lt;/SPAN&gt;; }&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; MovementChangeEventArgs(&lt;SPAN style="COLOR: teal"&gt;Guid&lt;/SPAN&gt; instanceId,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;MovementChangeType&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; movementChangeType) : &lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;(instanceId)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _movementChangeType = movementChangeType;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.WaitForIdle = &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; &lt;SPAN style="COLOR: blue"&gt;enum&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;MovementChangeType&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp; Brake,&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Accelerate&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;- Create an interface which can be shared by both the local service (the service which has the responsibility for raising the event) and the state machine.&lt;BR&gt;- Add only a single event to that interface &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;SPAN style="COLOR: teal"&gt;ExternalDataExchange&lt;/SPAN&gt;]&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;IVehicleService&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="COLOR: blue"&gt;event&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;EventHandler&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: teal"&gt;MovementChangeEventArgs&lt;/SPAN&gt;&amp;gt; MovementChanged;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;- As you can see above, the interface is marked with the &lt;B&gt;ExternalDataExchangeAttribute &lt;/B&gt;attribute which flags the interface as a local service used for data exchange purposes.&lt;BR&gt;- The next step is to implement the &lt;B&gt;IVehicleService&lt;/B&gt; interface: 
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;VehicleService&lt;/SPAN&gt; : &lt;SPAN style="COLOR: teal"&gt;IVehicleService&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; RaiseEvent(&lt;SPAN style="COLOR: teal"&gt;MovementChangeEventArgs&lt;/SPAN&gt; args)&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="COLOR: teal"&gt;EventHandler&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: teal"&gt;MovementChangeEventArgs&lt;/SPAN&gt;&amp;gt; movementChanged = MovementChanged;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (movementChanged != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;movementChanged(&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;, args);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&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: teal"&gt;EventHandler&lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: teal"&gt;MovementChangeEventArgs&lt;/SPAN&gt;&amp;gt;MovementChanged;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;This interface now can be registered with the state machine. For this, you will need a &lt;B&gt;HandleExternalEvent&lt;/B&gt; activity as the first event driven activity within the workflow of both the stopped and moving states: 
&lt;P&gt;- &lt;B&gt;VehicleService&lt;/B&gt; class library must be referenced by the workflow project &lt;BR&gt;- Go to the stopped state and drop a &lt;B&gt;HandleExternalEvent&lt;/B&gt; activity as the first item within the event driven workflow. You will also need to set the following properties on this activity:&lt;BR&gt;&amp;nbsp;&amp;nbsp; o &lt;B&gt;InterfaceType&lt;/B&gt;: IVehicleService&lt;BR&gt;&amp;nbsp; &amp;nbsp;o &lt;B&gt;EventName&lt;/B&gt;: MovementChanged&lt;BR&gt;- Now attach an event handler to the &lt;B&gt;Invoked&lt;/B&gt; event of this activity which is called when the &lt;B&gt;MovementChanged&lt;/B&gt; event is invoked. At this stage, you have a number of options open to you. One option is&amp;nbsp;to keep the result of the event using a local property. You could perhaps add an &lt;B&gt;IfThenElse&lt;/B&gt; activity followed by a &lt;B&gt;SetState&lt;/B&gt; to your workflow which could trigger a state transition based on that local property. 
&lt;P&gt;&lt;A href="http://tk3.storage.msn.com/x1pqP5noGPWAA6f9f2eD5gmGer3V6BAg1RAPI_-cll46EVJYhwWvo-Acr0fJS5IAQmxgwVXJ9WcQWAyFP9QNHtdPMgfpSUSeF3yDZpKZoJNzM9ec4Mnvp1RV6_NiX9CReaMwE6_fX98aaXmA0av3uCQgA" mce_href="http://tk3.storage.msn.com/x1pqP5noGPWAA6f9f2eD5gmGer3V6BAg1RAPI_-cll46EVJYhwWvo-Acr0fJS5IAQmxgwVXJ9WcQWAyFP9QNHtdPMgfpSUSeF3yDZpKZoJNzM9ec4Mnvp1RV6_NiX9CReaMwE6_fX98aaXmA0av3uCQgA"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=196 src="http://tk3.storage.msn.com/x1pqP5noGPWAA6f9f2eD5gmGer3V6BAg1RAPI_-cll46EW4oQG-DTEFDwlB-MtpZxEClMTZ4bLq7ffkRIXPbG0xzgmbkdzCVU1tpQz-H_v0ykKBnD_53o92ATEVCY3lyYAoT5fo2B7s9kfQHjO2XZVTgQ" width=240 border=0 mce_src="http://tk3.storage.msn.com/x1pqP5noGPWAA6f9f2eD5gmGer3V6BAg1RAPI_-cll46EW4oQG-DTEFDwlB-MtpZxEClMTZ4bLq7ffkRIXPbG0xzgmbkdzCVU1tpQz-H_v0ykKBnD_53o92ATEVCY3lyYAoT5fo2B7s9kfQHjO2XZVTgQ"&gt;&lt;/A&gt; 
&lt;P&gt;The very last step is to make the workflow runtime aware of the service: 
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;WorkflowRuntime&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; workflowRuntime = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;WorkflowRuntime&lt;/SPAN&gt;();&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;ExternalDataExchangeService&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; dataExchange = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;ExternalDataExchangeService&lt;/SPAN&gt;();&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;workflowRuntime.AddService(dataExchange);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;VehicleService&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; vehicleService = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;VehicleService&lt;/SPAN&gt;();&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"&gt;dataExchange.AddService(vehicleService);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;You can now simply raise events by calling the RaiseEvent method of the vehicleService instance:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"&gt;vehicleService.RaiseEvent(&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp; new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;MovementChangeEventArgs&lt;/SPAN&gt;(instance.InstanceId, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="COLOR: teal"&gt;MovementChangeType&lt;/SPAN&gt;.Brake));&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Please let me know what you think about this blog entry.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1348974" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pedram/archive/tags/WF/default.aspx">WF</category></item></channel></rss>