Department of InformatiX
Microsoft .NET Micro Framework Tools & Resources


The final 4.1 version was released to Microsoft Downloads and announced on the team blog on Monday, the 7/19/2010. There were no notes on this particular refresh, here is a quick summary of what's new for those unfamiliar with the 4.1 version:

For more details, see the previous builds below. This build changed all generated namespace prefixes used in web services to single letter ones, which reduced the size of all generated messages. Also most of the strings being parsed are now being trimmed before. The first hotfix (QFE) was released on 8/24/2010 having the same build version and containing no changes in managed libraries, but it newly includes debugging symbols. The hotfix replaced the original release, which is no longer available for download (contact me if you need it).

No breaking changes were introduced in this build. Some noteworthy changes (since 4.1.2722.0):

New Microsoft.SPOT.Debug.EnableGCMessages method.
Microsoft.SPOT.Presentation.WindowManager was fixed to set touch capturing on the top most window.
Bug fixes in System.IO.StreamReader reading methods when dealing with multi-byte characters.

Other and internal changes (since 4.1.2722.0):

Internal Dpws.Client.Discovery.DpwsServiceDescription constructor now accepts (and DpwsServiceDescriptions requires) an IPEndpoint to resolve the localhost XAddr.
Bugs fixed in Dpws.Client.Discovery.DpwsDiscoveryClient - the Probe method was ignoring the timeout parameter, the probe and resolve sending threads could have been collected by GC, now the Probe resp. Resolve methods block until the message are sent. The message should be sent several times with random time offsets, but all copies were being sent at once and in case of failure the sending stopped. This is now fixed, plus unnecessary code was removed.
Internal Dpws.Device.Discovery.DpwsDeviceDiscoService no longer throws R0031 fault in Probe and Resolve methods.
Internal Dpws.Device.Discovery.DpwsDeviceDiscovery now prefers requested service's endpoint and transport addresses if available when matching the probe/resolve requests, and localhost addresses are now being resolved into proper IP.
Performance improvement in Dpws.Device.Mex.DpwsDeviceMexService - DpwsWsxMetdataResponse initialization moved to the constructor and cached for multiple Get calls.
System.Ext.Xml.XmlWriter.WriteStartElement newly returns the prefix used to write the element. This is useful when the local namespace is declared in the parent element, to save subsequent lookups.
New System.Ext.Console.Write overloads which accept a byte array and decode it to the debug output as an UTF-8 string. Use the one with index and count parameters, the other one was optimized out.
New public static Ws.Services.WsNamespacePrefix class which holds namespace prefixes used in DPWS.
Bug fixes and performance improvements in the Ws.Services.Encoding.TextMessageEncodingBindingElement class, serialized body parts are reused, body start is being inserted at the beginning of body parts, and index out of range exception avoided when there are no body parts to include.
Ws.Services.Faults.WsFaultException has a new Details read-only property and accepts the value in its constructor.
Improvements in the internal Ws.Services.Mtom.WsMtom.CreateMessage - unnecessary code removed, mime header values trimmed from the end too, <soap@soap> content ID is no longer accepted, 8bit transfer encoding is accepted. Tiny performance improvement in the ReadLine method.
New Ws.Services.Mtom.WsMtomBodyParts.AddStart method to allow inserting a body part at the beginning of the collection.
New Ws.Services.Serialization.DataContractSerializer._CompressByteArrays protected boolean field, but it is not used anywhere yet. The GetBodyPartContent now works for contentIDs containing encoded slashes and colons (hardcoded) as well (these are being returned by the XML reader).
Ws.Services.Transport.HTTP.WsHttpMessageProcessor now challenges the metadata exchange endpoint if the requested one does not support the required operation.
Ws.Services.WsaAddressing.WsWsaHeader now throws a WsFaultException when fault message is being parsed.
New internal static Ws.Services.Faults.WsFault.ThrowFaultException that parses the web service fault messages.
Internal Ws.Services.WsSoapMessageWriter class unified quotation marks to double ones when writing out the namespace declarations.
Microsoft.SPOT.Net.NetworkInformation.NetworkInterface was fixed to return correct string representations of IP addresses on big endian processors.
Microsoft.SPOT.Application.OnEvent no longer looks up target window for touch calibration points.
System.Net.Sockets.Socket was fixed to correctly SetSocketOption and GetSocketOption on big endian processors.


Confusingly announced as "third and final beta refresh" in the News section at on 6/30/2010. To my best knowledge there was no refresh between 4.1.2722.0 and 4.1.2649.0, so it was likely intended as third beta, final refresh. There were further updates to the porting kit, together with two areas in the managed libraries. Oficial list says:

However, this seems to me as list corresponding to the updates in the RTM release, see above.

Breaking changes (since 4.1.2649.0):

Dpws.Client.Discovery.DpwsMexService now requires a ProtocolVersion. Supply new ProtocolVersion10() for compatibility.
Ws.Services.Binding.BindingContext now requires a ProtocolVersion. Supply new ProtocolVersion10() for compatibility.

Other and internal changes (since 4.1.2649.0):

Bug fix in the Dpws.Client.Discovery.DpwsRelationship - it now uses the supplied version's WsdpNamespaceUri.
Internal Dpws.Client.Discovery.DpwsEventSubscription and Dpws.Client.Eventing.SubscriptionEndEventArgs now also require a ProtocolVersion.
Dpws.Client.Eventing.DpwsEventingClient was updated to use the supplied version's namespaces during events subscription.
Bug fixes in the Dpws.Device.Services.DpwsWseSubscriptionMgr and Dpws.Device.Mex.DpwsWsxMetdataResponse classes - they now use the supplied version's WsdpNamespaceUri.
Static Microsoft.SPOT.Presentation.WindowManager.Instance property was changed to field. This improves performance (breaks reflection though).
System.Uri now supports IPv6 host names (enclosed in square brackets).
System.Net.HttpListener and HttpWebRequest set the SocketOptionName.Debug socket option.
Small fix in the System.Net.Sockets.Socket - disposing it could left a native socket open if it had a negative handle.


First refresh of the public 4.1 beta, updated on Microsoft Connect and announced on the team blog on 6/10/2010. Most updates this release were in the porting kit and some fixes in the SDK integration/tools. Official list of what's new in the managed part is:

Breaking changes (since 4.1.2459.0):

Ws.Services.WsWellKnownUri.WsdpNamespaceUri constant was moved as a property to the version dependent Ws.Services.ProtocolVersion class, which is abstract, so you need to implement it. "" is the current value for both 1.0 and 1.1 versions. DPWS classes that need this namespace were updated.

Other and internal changes (since 4.1.2459.0):

Dpws.Client.Discovery.DpwsMetadata and DpwsRelationship (and internal DpwsThisDevice and DpwsThisModel) now require and use the ProtocolVersion.
Dpws.Device.Services.DpwsWseSubscriptionMgr clones the supplied binding for its use.
New Ws.Services.Binding.Binding.Clone method, the cloning is member-wise.
Bug fix in Ws.Services.Faults.WsFault - now the xml:lang namespace is correctly set. Exception types (fault subcode) were taken out of the Ws namespace.
Bug fixes in Microsoft.SPOT.IO.RemovableMedia - the media events are called asynchronously, but the timers calling them could have been collected by GC. A NullReferenceException could have been thrown when media was removed.
Bug fix in System.Guid - a NullReferenceException could have been thrown if calling ToString resp. ToByteArray when the data were not initialized yet. Not sure why this occured though, probably during debugging the constructors.


This was the first 4.1 beta version, available for public via Microsoft Connect on 5/18/2010 and announced a week later on the team blog. Starting this release, .NET Micro Framework supports big endian processors too. Also since the TCP/IP stack was licenced from a 3rd party company and could not therefore be made open-source, lwIP stack (stands for light-weight), which is freely available under a BSD-style licence, is now supported in addition to the current commercial stack. Since .NET Micro Framework supports SSL, OpenSSL, which is available under an Apache-style licence, is now a supported open-source alternative too.

Comparison to previous (4.0) release:

Official list of new SDK features:

Breaking changes (since 4.0.1681.0):

General changes through assemblies not listed separately:

Dpws.Client.Discovery.DiscoveryVersion, DiscoveryVersion10, and DiscoveryVersion were removed and their functionality replaced by Ws.Services.ProtocolVersion, ProtocolVersion10 and ProtocolVersion11 classes in the MFWsStack.dll assembly.
Dpws.Client.Transport.DpwsHttpClient and DpwsSoapResponse classes were removed, use Ws.Services.Transport.HTTP.WsHttpClient in MFWsStack.dll assembly instead.
Dpws.Client.Discovery.DpwsDiscoveryClient.DiscoVersion is now read-only without compensation. Use DpwsClient constructor to specify the device-wide version.
Both constructors of Dpws.Client.DpwsClient were removed and replaced by a single one accepting Ws.Services.Binding.Binding and the ProtocolVersion. Also the BodyParts and EventingPort properties were removed (port is now defined via binding).
Dpws.Device.Services.DpwsWseSubscriptionMgr now also requires a Binding with ProtocolVersion in the constructor.
Dpws.Device.Services.DpwsHostedService.BodyParts property was removed as well.
Dpws.Device.Discovery.DiscoveryVersion, DiscoveryVersion10, and DiscoveryVersion were removed and their functionality replaced by Ws.Services.ProtocolVersion, ProtocolVersion10 and ProtocolVersion11 classes in the MFWsStack.dll assembly.
Dpws.Device.Discovery.DpwsDeviceDiscoService.Probe now refuses all probe requests that specifies any Scope element.
Dpws.Device.Discovery.ManagedDiscovery.DirectedBye and DirectedHello methods now require instances of DpwsDiscoGreeting and ProtocolVersion classes.
Bug fix - services no longer support eventing operations by default. You have to add them explicitly using the new Dpws.Device.Services.DpwsHostedService.AddEventServices method.
Dpws.Device.Device.Start method now requires ServerBindingContext. EndpointAddress and Port properties are now read-only, use the new Initialize(Binding, ProtocolVersion method to change their values.
Ws.Services.Soap.WsMessageType enum was removed without replacement, it is no longer needed.
Ws.Services.SoapMessageBuilder static class was removed, it was no longer used.
Ws.Services.Transport.HTTP.WsHttpClient.SendRequest was splitted into SendRequest and SendRequestOneWay methods, accepting remoteEndpoint as an Uri.
Ws.Services.WsaAddressing.WsWsaEndpointRef..ctor(XmlReader) constructor now requires an addressing scheme too. Use "" to get previous behavior. The ReferenceParameters element was accepted in both 2004 and 2005 addressing schemes, which is now not possible.
Ws.Services.WsWellKnownUri.WsaAnonymousRoleUri, WsaAnonymousUri, WsaNamespaceUri_2004_08, WsaNamespaceUri_2005_08 and WsdNamespaceUri constants and members were moved to the respective Ws.Services.ProtocolVersion1x classes.
Microsoft.SPOT.EventHandlersStore class was removed and its functionality replaced by the Hashtable. This also affects signature of the Microsoft.SPOT.Presentation.UIElement.InstanceEventHandlersStore property.
Microsoft.SPOT.Input.StagingAreaInputItem.IsMarker was removed without replacement. Marker is no longer needed in the input staging area.

Some noteworthy changes:

Previously internal static Dpws.Device.Discovery.DpwsDiscoGreeting class became public (non-static). XAddrs element is no longer being sent with the Bye message.
New System.Ext.Xml.XmlMemoryWriter for writing XML into a MemoryStream.
Lots of new classes were added to support the web services binding mechanism, contexts and channels, inside the Ws.Services.Binding namespace, most importantly the WS2007HttpBinding and CustomBinding classes.
Service faults now use anonymous recipient only if the header does not specify any FaultTo. All fault elements use the soap namespace prefix (bug fix).
Usage of quotation marks in SOAP envelopes was unified to the double ones (internal Ws.Services.WsSoapMessageWriter).
Ws.Services.Xml.WsXmlNamespaces class became public. This is being used to keep list of currently used prefixes and namespaces when working with a XML file.
Internal Ws.Services.Transport.WsNetworkServices, which is being used to obtain current IP address, now examines all network interfaces instead of the first one only, and contains a new GetLocalIPV4AddressValue method returning the IP address as an unsigned integer.
New assemblies for working with the ZigBee/XBee/IEEE 802.15.4 wireless communication standard.
A managed driver for the Texas Instruments' CC2420 RF Transceiver is included in the framework.
The Microsoft.SPOT.Hardware.I2CDevice.CreateReadTransaction and CreateWriteTransaction methods now return proper transactions even if the I2CDevice class was disposed.
Microsoft.SPOT.Hardware.SPI.WriteRead(writeBuffer, writeElemCount, readBuffer, readOffset) methods were changed to (writeBuffer, writeOffset, writeCount, readBuffer, readOffset, readCount, startReadOffset) for more flexible usage. Use (writeBuffer, 0, writeElemCount, readBuffer, 0, readBuffer.Length, readOffset) for compatibility.
New Microsoft.SPOT.Hardware.SystemInfo.IsBigEndian property.
New Microsoft.SPOT.Reflection.GetAssemblyMemoryInfo method returning an assembly memory diagnostics info via the new (nested) AssemblyMemoryInfo class.
Staging area (for input events) processing was changed from LIFO (stack) to FIFO (queue), with preview report retaining a top priority.
Bug fixed in Microsoft.SPOT.EventRoute - single tunneled events were not being fired.
New System.Collections.Hashtable class, the first associative container.
New System.Collections.DictionaryEntry tuplet class and IDictionary and IEqualityComparer interfaces to support the hashtable and creation of other associative containers.
System.Globalization.DateTimeFormat now supports 3 second fraction digits instead of 2.
Bug fixes in assembly name parsing in the System.Reflection.Assembly class - culture, public key token and other attributes after version number were causing the parsing to fail, and the build and revision numbers now accept whole integer range (instead of ushort).
Significant performance improvements in System.Convert parsing methods.
System.Guid now uses the System.Random generator instead of custom random algorithm.
There is a new System.Runtime.Versioning.TargetFrameworkAttribute. It is not being used anywhere, I guess it is for conditional compilation when targeting multiple versions of the framework.
New System.Net.HttpKnownHeaderNames: ContentID, ContentTransferEncoding and MimeVersion.
Some fixes in the System.Net.HttpWebRequest - HTTPS connections now require certificate verification if any certificate is available on the device. GetRequestStream now returns the stream cloned (and properly tidies up if the request fails). Request stream is now disposed and removed from the keep-alive pool if the class was disposed and GetResponse not called yet. If the keep-alive duration is exceeded, socket is disposed even if it is marked as in use. Attempts to reuse sockets now tests for socket's write ability, not its error status.
System.Net.HttpWebResponse.GetResponseStream method also returns the stream cloned. This one also clears the original stream.
System.Net.WebRequest is now IDisposable (and introduces destructor and dispose methods). Dispose it properly.
System.Uri now implements Equals and GetHashCode methods and == and != operators, so it can be used in the Hashtable. Comparison is case insensitive, absolute URIs by the AbsolutePath, others by the OriginalUriString.
Bug fix in the System.IO.StreamWriter class - disposing it now closes the stream even if the Flush call fails.

Other and internal changes (since 4.0.1681.0):

General changes through assemblies not listed separately:

Dpws.Client.Discovery.DpwsDiscoveryClient probing and resolving timeouts moved from managed code to sockets (native code) and message sending is now asynchronous (starts a new thread).
Bug fixed in Dpws.Client.Discovery.DpwsDiscoveryClient.Probe method which could cause more matches than maxProbeMatches to occur.
Dpws.Client.Discovery.DpwsMexService, Dpws.Client.Eventing.DpwsEventSubscription and SubscriptionEndEventArgs now accept a ProtocolVersion (were fixed to version 1.0).
Dpws.Client.Eventing.DpwsEventingClient now processes fault responses only if they correspond to the class' protocol version, subscriptions and their renewals and cancellations now use the protocol version (were fixed to 1.0).
Bug fix in the internal Dpws.Client.Discovery.DpwsDiscoClientProcessor.ProcessResolveMatch method (could have been throwing a null reference exception).
The discovery service (internal Dpws.Client.Discovery.DpwsDiscoClientService) now maintains cache of and ignores duplicate requests (ProcessRequest method), instead of thread locking.
Private static Dpws.Client.Discovery.DpwsDiscoveryClient.DiscoveryEP field was removed, use public Ws.Services.Discovery.WsDiscovery.WsDiscoveryEndPoint.
Bug fix and performance improvement in Dpws.Client.Discovery.DpwsServiceDescriptions.IndexOf (was endpoint addresses case sensitive).
Duplicate code removed in Dpws.Client.Discovery.DpwsServiceDescriptions indexer.
Private Dpws.Client.Eventing.DpwsEventingClient.WriteEndpointRef(xmlWriter, endpointRef, name) no longer accepts the xmlWriter by reference.
Private Dpws.Client.DpwsClient.Init method was removed and its content moved into the constructor, UpdateDiscoVersion one was removed without replacemnt. Transport related properties of the class were delegated to the assigned binding.
Internal Dpws.Device.Discovery.DpwsDeviceDiscoService exposes the supplied ProtocolVersion via the Version property.
All of Dpws.Device.Discovery.DpwsDeviceDiscoService.Probe, Resolve and DpwsDeviceMexService.Get methods now parse the message header (and ev. generate a R0031 fault).
All static members of DpwsDiscoGreeting are now instance ones.
Performance improvements - internal Dpws.Device.Services.DpwsWseEventSinkQMgr uses now Timer instead of infinite loop in a separate thread (which also removed frequent stop request checks), and uses indices to remove expired event sinks.
Bug fix in internal Dpws.Device.Services.DpwsWseEventSinks - the event sink addresses are now treated case insensitively. New RemoveAt method was added to allow faster item removals.
Tiny performance improvements in Dpws.Device.Services.DpwsWseSubscriptionMgr.FireEvent - no longer tries to send a failure message back when a transport exception has occured, and removes sink by index. Methods now look for endpoints and event sinks using string indexer. SendSubscriptionEnd's restriction to HTTP transport was removed.
Private Dpws.Device.Device.Init method removed, use new public Initialize instead. SetAppSequence removed without replacement (the sequence's type was changed to int). Start and Stop methods are now marked as synchronized, atomic operations use Interlocked instead of locking. Transport related properties are now delegated to the binding or service host class.
Internal System.Ext.Xml.ElementStack class was removed - standard System.Collections.Stack is being used instead in the System.Ext.Xml.XmlWriter. Also resources are now being freeed during disposal of the writer.
New Ws.Services.Discovery.WsDiscovery static class to hold discovery transport values (IP, port, end point).
Public Ws.Services.Soap.WsAppSequence tuplet class and WsPrefix flags to simplify WsMessage creation (previously they were nested into the internal Ws.Services.WsSoapMessageWriter class).
Precision improvement in Ws.Services.Utilities.WsDuration constructors (dividing integers instead of casting double precision multiplication to compute DurationInSeconds).
Ws.Services.WsaAddressing.WsWsaHeader now accepts anonymous message recipients, and introduced the MustUnderstand property (currently used in probe requests only).
Internal Ws.Services.Soap.WsMessage become public and introduced Deserializer, Method, MtomProperties, Reader and Serializer properties. Message and MessageType fields were removed, BodyParts was encapsulated into a property.
Performance improvement in Ws.Services.Mtom.WsMtom.ReadLine (carriage return lookup moved to the native code).
Footprint improvement in Ws.Services.Serialization.WsXmlConvert - ToByte, ToInt16, ToInt32, ToInt64, ToUInt16, ToUInt32 and ToUInt64 now call respective System.Convert methods (internal ToInt64(string, bool) was therefore removed).
Private Ws.Services.Transport.HTTP.WsHttpClient.ProcessMtomHeader method was removed (its functionality is now covered by the Ws.Services.Encoding.TextMessageEncodingBindingElement, and so was internal SendRequest method (handled by bindings).
Internal Ws.Services.Transport.HTTP.WsHttpMessageProcessor was rewritten. Basically the code of ProccessRequest is now handled by the Ws.Services.Binding.HttpTransportBindingElement.OnProcessInputMessage, SendResponse by its OnProcessOutputMessage method.
Internal Ws.Services.Transport.HTTP.WsHttpServiceHost was updated to use a binding instead of a TCP port, the Port property was removed, Start and Stop methods marked as synchronized. The Start method now requires a binding context and will newly throw an exception if the host is already started. The Stop method newly also throws an exception, and blocks the caller until the listener thread terminates.
Internal Ws.Services.Transport.UDP.WsUdpMessageProcessor now requires and works with the RequestContext and the ProcessRequest method can generate fault response where appropriate.
Internal Ws.Services.Transport.UDP.WsUdpServiceHost, instead of accepting endpoints collection in the constructor, has now a parameterless constructor and AddServiceEndpoint and RemoveServiceEndpoint methods. The Start and Stop methods were marked as synchronized and do remember their call count. The SendMessage method and IsRunning property were removed, an IgnoreRequestFromThisIP method and a static Instance property added. The class is now sealed.
Internal Ws.Services.Transport.WsMessageCheck went public.
Internal Ws.Services.Transport.WsThreadManager now sets an auto reset event (ThreadEvent) every time it processes a request. This is being used to improve the performance of the UDP host.
Internal Ws.Services.WsSoapMessageParser.ParseSoapMessage changed signature from out WsWsaHeader to ref WsWsaHeader and requires now a ProtocolVersion.
Internal Ws.Services.WsSoapMessageWriter, previously static, has now all methods instance (dependent on the protocol version). The WriteSoapMessageStart, apart from couple of new overloads, now optionally excludes the message header.
Threading bug fix in Microsoft.SPOT.Input.InputManager.CurrentInputManager property.
Microsoft.SPOT.Input.StagingAreaInputItem was switched to a Hashtable (from pair of ArrayLists). The isMarker parameter was removed from constructor as marker is no longer used in the staging area.
Microsoft.SPOT.Presentation.Media.DrawingContext.PopClippingRectangle was fixed to consider rectangles with negative width and/or height as empty ones, the same way the PushClippingRectangle method does.
Signatures of all private static handlers in Microsoft.SPOT.Presentation.UIElement were changed to accept general RoutedEventArgs (though proper types are still required to be passed).
Performance improvement - Microsoft.SPOT.Dispatcher was updated to use a Hashtable instead of an ArrayList to keep the list of dispatchers indexed by threads. Bug fixed in the InvokeShutdown method (thread is now being removed from the list on its dispatcher shutdown), and threading bug fix in the CurrentDispatcher property.
Microsoft.SPOT.EventRoute.Add method's signature changed the Delegate parameter to a RoutedEventHandler one.
Microsoft.SPOT.RoutedEventHandlerInfo.Handler and corresponding internal types were also changed to RoutedEventHandler. Internal Microsoft.SPOT.RoutedEvent.IsLegalHandler method was removed as all the handlers are now strongly typed.
System.IO.Stream closing during disposal was decorated by a try catch clause and a destructor was added.
Private System.Type.ParseTypeName method now clears the assemblyString argument if no assembly is present in the type name.
New internal static System.Net.HttpWebRequest.RemoveStreamFromPool synchronized method for proper removing keep-alive sockets.
Bug fix - System.Net.HttpWebResponse now calls base's Dispose during disposal.
New CloneStream method in the internal System.Net.InputNetworkStreamWrapper. Cloning is member-wise and the cloned class is aware of being a clone. The only difference is that disposing a cloned wrapper does not close the underlaying stream, just clears the wrapper's in use flag.
System.Net.WebResponse now contains a destructor.


Final release published on Microsoft Download Center on 11/15/2009, officially announced a day later on the team's blog. Lorenzo also made an announcement on PDC 2009 in Los Angeles on 11/17/2009. This is first release since the team moved to the Developer Division. Licensing was changed (no per device fees), porting kit is now available for free download ibidem without any agreement, and so is the SDK source code as a part of it (Apache 2.0 license).

For those not familiar with 4.0 release at all, here is a quick summary of what's new:

Breaking changes (since 4.0.1496.0):

Ws.Services.WsWellKnownUri.WsaNamespaceUri renamed to WsaNamespaceUri_2004_08. The WsaAnonymousUri constant now uses 2005 schema.
Ws.Services.Transport.HTTP.WsHttpClient throws WebException when no response is received, and ProtocolViolationException content length of zero header received. Both scenarios used to throw IOExceptions - update your catch blocks.
Microsoft.SPOT.TimeZoneId.Jerusalem enum value removed.
Public System.AppDomain.LoadInternal was made private. Currently there is no supported way for loading assemblies having numeric version information.
Both System.IO.StreamReader.Read overrides now use the cached instance of CurrentEncoding's decoder. If you were changing stream encoding on the fly, you have to create your own StreamReader now and override the methods.
Microsoft.SPOT.Application.OnEvent method searches for the correct window for touch events only during TouchMessages.Down message. This seriously improves performance, but has two major drawbacks: First, you need to ensure the down event gets in (namely when you generate the events yourself), and second, it makes every window to capture the touch input (e.g. windows won't be switched if you drag out of the current window).

Some noteworthy changes:

Support for addressing 2005 schema was added (new Ws.Services.WsWellKnownUri.WsaNamespaceUri_2005_08) and DPWS libraries were updated to use this one (2004 requests still accepted). WsaAnonymousRoleUri constant was added.
Sent SOAP headers now contains soap:mustUnderstand="1" both for wsa:To and wsa:Action.
System.Ext.Xml.XmlWriter generates auto-numbered namespaces instead of changing xmlns namespace on nested elements.
System.Net.HttpWebRequest.Expect header can now be set to 100-continue.
Microsoft.SPOT.Hardware.SPI.Configuration has new BusyPin and BusyPin_ActiveState readonly fields (and a constructor accepting their values). I have not tested yet if they do anything (they are not being used in managed code anywhere).
The default thickness of Microsoft.SPOT.Presentation.Shapes.Shape.Stroke was changed from 0 to 1.
Width and Height of Microsoft.SPOT.Presentation.Shapes.Rectangle are now properly set to 0 in the default constructor (were kept unset before).
Bug fixed in the Microsoft.SPOT.Presentation.Media.SolidColorBrush's algorithm of filing polygons.

Other and internal changes:

General changes through assemblies not listed separately:

Minor performance improvement in Dpws.Device.Mex.DpwsWsxMetdataResponse (unused code removed).
Private Dpws.Device.Services.DpwsHostedService.GetEventSink removed (there is one in the DpwsWseSubscriptionMgr already).
Bug fixed in Dpws.Device.Services.DpwsWseSubscriptionMgr.Renew method (added null check).
Dpws.Client.Transport.DpwsHttpClient.SendRequest now outputs the request to the console (instead of the WsHttpClient), and some redundant code was removed.
Ws.Services.Transport.HTTP.WsHttpClient no longer outputs request to the console (DpwsHttpClient does instead). Inner try block was narrowed and response is being explicitly disposed.
System.Net.HttpWebResponse uses base's IDisposable, so the protected Dispose(bool) method is overridable, and public Dispose() calls Close().
Internal System.Xml.XmlWrappingReader uses base's IDisposable.
Microsoft.SPOT.Input.InputManager's stagging area is now held in Stack.
Tiny performance improvement in Microsoft.SPOT.Presentation.Controls.Border.SetBorderThickness (redundant dispatcher access check removed).
Performance improvement in Microsoft.SPOT.Presentation.Media.DrawingContext and ImageBrush (borders of zero width not painted). Clipping rectangles are now also held in Stack.
Performance improvement in Microsoft.SPOT.DispatcherTimer - underlaying timer is being reused, so the private Restart method was removed.


Additional refresh of public beta, published on Microsoft Connect and announced on the blog on 10/12/2009.

Official list of updates in this refresh:

I have found only two small internal changes in the managed libraries:

Improved performance in the protected Ws.Services.Serialization.DataContractSerializer.ReadAnyAttribute method.
Bug fix - System.IO.Ports.SerialPort now passes the SerialPort instance to the event handlers of DataReceived and ErrorReceived events.


Public beta refresh, published on Microsoft Connect and announced in the newsgroup and on the blog on 09/24/2009.

Noteworthy changes:

System.Type has a new public AssemblyQualifiedName property.
System.Net.HttpListener's waiting for connection poll timeout was fixed to be DefaultKeepAliveMilliseconds (one minute).
Maximum length of line read by HTTP classes was increased to 4,000 (from 1,000).
There is a new System.Net.AuthenticationType enum, with a WindowsLive value. This is not used anywhere yet, but who knows what we can look for...
System.Net.Sockets.SocketException can now be instantiated from user code (has a public contructor).

Other and internal changes:

Ws.Services.Transport.HTTP.WsHttpMessageProcessor content type case insensitivity was extended to all checks. This was fixed in internal Ws.Services.Mtom.WsMtom.ParseMessage too.
ExitSecureContext and SecureCloseSocket methods of internal Microsoft.SPOT.Net.Security.SslNative class now returns int results.
close method of internal Microsoft.SPOT.Net.SocketNative class now returns int result as well.
Algorithm of Microsoft.SPOT.Presentation.Media.SolidColorBrush.RenderPolygon was improved.
More strict checking of assembly name format (version required after and only after comma, internal System.Reflection.Assembly.ParseAssemblyName).
Internal System.RuntimeType has a new public AssemblyQualifiedName property.
System.Type.GetType supports assembly versioning.
Aborting System.Net.HttpListener waits for accept thread to complete, removed redundant socket closing. Socket ownership was moved to the underalying network stream. Private members renamed (m_serviceStarted to m_ServiceRunning, m_serviceShutDown to m_Closed), m_AcceptException removed.
Internal System.Net.HttpListenerContext has Close method, in which it disposes the input and output streams.
Try catch block is now around sending headers in System.Net.HttpListenerResponse.Close, underlaying stream (instead of its socket directly) is disposed in the Dipose method. Yeah and private m_IsResponseSend was renamed to m_WasResponseSent.
System.Net.HttpWebRequest keeps only status of the response instead of whole response instance (i.e. m_response removed), some fixes - closed socket or sockets with request timeout could have been left open, socket in use could have been disposed, content length is -1 by default (instead of 0).
Internal System.Net.HttpWebResponse.ResponseStream property removed (use public GetResponseStream method), content length is -1 by default and improvements in disposal.
Some improvements and fixes in internal System.Net.InputNetworkStreamWrapper, including larger buffer (1024 bytes instead of 256) and asynchronous stream release.
System.Net.NetworkCredential has new AuthenticationType property.
Secure context fixes in Microsoft.SPOT.Net.Security.SslStream - could have been left open if authentication fails, UpdateCertificates now throws an exception if no context has been established, disposal improvement.
Added checks for initialized socked in the System.Net.Sockets.NetworkStream.DataAvailable, Length, Write and Read members, _socketType became protected.


First open beta version, published on Microsoft Connect on 08/31/2009, announced on 09/04/2009 on the blog and in the newsgroup.

Breaking changes (since 4.0.1069.0):

Microsoft.SPOT.Net.NetworkInformation.Wireless80211.Ssid is now string instead of byte array.
Microsoft.SPOT.Net.NetworkInformation.Wireless80211.EncryptionType.TKIP enum value removed.
System.Xml.XmlReader.Dispose() is no longer virtual.

Noteworthy changes:

Microsoft.SPOT.Net.NetworkInformation.Wireless80211.MaxPassPhraseLength was doubled to 64.
Microsoft.SPOT.Net.NetworkInformation.Wireless80211.AuthenticationType enum has new None, Open and Shared values.
Microsoft.SPOT.Net.NetworkInformation.Wireless80211.Encryption enum has new None value.
Microsoft.SPOT.Time.TimeServiceSettings.RefreshTime has now a default value of 300,000.

Other and internal changes:

General changes through assemblies not listed separately:

Dpws.Client.Discovery.DiscoveryVersion10.Namespace now returns "".
Dpws.Client.Discovery.DiscoveryVersion11.Namespace now returns "".
Dpws.Client.Discovery.DpwsDiscoveryClient is now dependant on a parent DpwsClient, requiring it in the constructor and updating its discovery service when the DiscoveryVersion is set. There is a new DpwsClient.UpdateDiscoVersion method for this purpose, which re-registers the ClientDiscoveryService. The DpwsClient also deferred the DpwsDiscoveryClient initialization to the Init() method.
In the internal constructor of Dpws.Client.DpwsServiceType, everything starting last slash is now treated as Namespace again. I haven't really got this one yet.
Dpws.Device.Discovery.DiscoveryVersion10.Namespace now returns "".
Dpws.Device.Discovery.DiscoveryVersion11.Namespace now returns "".
Dpws.Device.Device.DiscoVersion can no longer be changed if the device is already started. To check this out, new Started property was added to the Device.
Performance improvement - Dpws.Device.Services.DpwsWseSubscriptionMgr keeps one WsHttpClient only.
Bug fix - internal Dpws.Device.Mex.DpwsWsxMetdataResponse now clears Device.Host's namespaces.
Tiny performance improvement in Ws.Services.Transport.HTTP.WsHttpClient.SendRequest (unnecessary setting of KeepAlive removed).
Ws.Services.Transport.HTTP.WsHttpMessageProcessor.ProcessKnownHeaders checks for Multipart/Related content type case insensitive way now (but only for this one).
Ws.Services.Transport.HTTP.WsHttpMessageProcessor.ProcessRequest no longer silently exits if ProcessRequestMessage fails.
Ws.Services.Transport.HTTP.WsHttpMessageProcessor.ProcessRequestMessage now requires matching not only service endpoint, but requested operation too.
Some improvements in the internal Ws.Services.Utilities.DebugTiming class.
Microsoft.SPOT.Presentation.Media.DrawingContext and internal Microsoft.SPOT.Presentation.Media.MediaContext are now IDisposable and releases their bitmaps.
Microsoft.SPOT.DispatcherTimer, and internal Microsoft.SPOT.DispatcherOperation.DispatcherOperationEvent and DispatcherOperationFrame are now IDisposable and releases their timers. They also have new virtual Close methods to support disposal for inheritors.
Constructors of Microsoft.SPOT.Input.InputDevice and Microsoft.SPOT.DispatcherObject became protected only, but since these classes are abstract anyway, nothing changes.
Microsoft.SPOT.Input.InputProviderSite has new virtual protected Dispose(bool) method to support disposal for inheritors.
Performance improvement in Microsoft.SPOT.RoutedEventHandlerInfo.Equals.
Removed some private, touch related methods: Microsoft.SPOT.Input.TouchDevice.ExtractRawTouchInputReport and static Microsoft.SPOT.Presentation.UIElement.OnTouchGesture[Ended|Changed|Started]Thunk.
Tiny performance improvement in System.Net.WebHeaderCollection.ToString method.
Bug fix - System.IO.StreamReader, StreamWriter, TextReader and TextWriter finalizers are no longer suppressed in their Close method.
Internal static System.IO.Path.HasIllegalCharacters and IsNullOrEmpty methods removed.
Private System.IO.StreamReader.ReadByte and internal ReadBytes methods removed.
Internal System.Xml.XmlWrappingReader is now explicitly IDisposable and checks for nulls when disposing.


This version was not available for public. Pre-Beta refresh announced on 8/7/2009. This is list of updates in the refresh:

Comparison to latest v3.0 release:

Official list of new features:

Breaking changes (since 3.0.7186.0):

Dpws.Client.Discovery.DpwsDiscoveryClient.DirectedProbe now requires the discovery service address, use dpwsDiscoveryClient.DiscoVersion.WellKnownAddress value to get the previous behavior.
First parameter of Dpws.Client.Transport.DpwsHttpClient.SendRequest must be now passed by reference.
System.Ext.Uri, UriHostNameType and UriKind were removed. Use System.Uri and others in the System.Http.dll assembly instead.
Ws.Services.Serialization.DataContractAttribute, DataMemberAttibute and EnumMemberAttribute were moved to the Ws.ServiceModel namespace - and, their properties were implemented.
Microsoft.SPOT.ExtendedTimeZone was removed. To set a time zone offset, use Microsoft.SPOT.Time.TimeService.SetTimeZoneOffset. Other features removed without any replacement.
Microsoft.SPOT.StylusEvent was removed. Stylus stuff was incorporated into multitouch - use Microsoft.SPOT.Touch.TouchEvent instead. To get previous stylusEvent.X, use touchEvent.Touches[0].X now.
Inking support was completely redesigned into the new touch system. Specially, all of Microsoft.SPOT.Touch.ApplicationGesture, Gesture, InkCollector, InkCollectorGestureEventArgs, InkCollectorGestureEventHandler, InkCollectorStrokeEventArgs, Point, Stroke, and internal TouchMessages were removed. Try to lookup a replacement in the Microsoft.SPOT.Input namespace in the Microsoft.SPOT.TinyCore.dll assembly, or see the InkCanvas code.
Removed Microsoft.SPOT.Touch.TouchCollectorConfiguration.SetStylusMoveFrequency interop, use the TouchMovingFrequency property. GetSetTouchInfo interop was splitted into GetTouchInput and SetTouchInput with the flag type changed to TouchInput enum (previously TouchInputFlag).
Microsoft.SPOT.Touch.TouchEventProcessor.ProcessEvent now accepts DateTime instead of TimeSpan.
There is a new XML parser in this version, with significant performance improvement caused be moving the code from the managed side to the native one. There are no longer all the XML related classes in the assembly, however, you can find them (and the complete old implementation) in the System.Xml.Legacy.dll assembly, in the same namespaces.
Few classes remained that overlap in the new and old assembly and thus might cause breaking changes:
- System.Xml.XmlException does not report LineNumber, LinePosition and SourceUri properties.
- System.Xml.XmlNameTable does not have Add and Get overloads accepting the char array.
- System.Xml.XmlNodeType does not have EntityReference, Entity, Document, DocumentType, DocumentFragment, Notation and EndEntity values.
- System.Xml.XmlReaderSettings has only IgnoreComments, IgnoreProcessingInstructions, IgnoreWhitespace and NameTable settings.
Microsoft.SPOT.Hardware.NativeEventHandler now reports DateTime instead of TimeSpan.
Microsoft.SPOT.Ink.InkCanvas was redesigned. Removed members: protected _inkCollector, SetPosition, OnGenericEvent override, protected OnGesture.
Removed Microsoft.SPOT.Hardware.Utility.DecodeRS (no replacement), GetLastBootTime (use Microsoft.SPOT.Hardware.PowerState.UpTime), HibernateSystem (use PowerState.Sleep), IsFeaturePresent (no replacement), QueryDriver (for rebooting, use PowerState.Reboot, otherwise no replacement) and WaitForIdleCPU (use PowerState.WaitForIdleCPU) methods.
Removed Microsoft.SPOT.Debug.DumpBuffer, DumpHeap, DumpPerfCounters, DumpStack methods without replacement.
Removed Microsoft.SPOT.Math.Random and Randomize method. A .NET Framework compatible System.Random class was added instead.
Removed Microsoft.SPOT.Reflection.GetAssemblyLastUse and GetAssemblyPatch methods. Patch is now indicated in the AssemblyInfo.m_flags field.
Stylus stuff was incorporated into multitouch. Replaced classes: Microsoft.SPOT.Input.RawStylusActions (RawTouchActions), RawStylusInputReport (RawTouchInputReport), Stylus (TouchCapture), StylusDevice (TouchDevice), StylusEventArgs (TouchEventArgs), StylusEventHandler (TouchEventHandler) and StylusEvents (TouchEvents). To get previous obj.X, use obj.Touches[0].X now.
Microsoft.SPOT.Input.ButtonEventArgs, FocusChangedEventArgs, InputEventArgs, InputReport and RawButtonInputReport constructors now require DateTime instead of TimeSpan. InputEventArgs.Timestamp and InputReport.Timestamp were also changed to DateTime.
Removed Microsoft.SPOT.Input.InputManager.PostNotifyInput, PostProcessInput, PreNotifyInput, PreProcessInput events (use inputManager.InputDeviceEvents[(int)InputManager.InputDeviceType.Button].PostNotifyInput etc.), and GenericDeviceTarget and StylusWindow properties (use GenericDevice.Target and TouchDevice.Target, respectively).
Microsoft.SPOT.Input.InputProviderSite.ReportInput method now requires InputDevice (use null to get previous behavior).
Microsoft.SPOT.Input.TouchMessages became internal only.

Microsoft.SPOT.Presentation.Controls.Border no longer accepts negative border thickness.
Microsoft.SPOT.Presentation.Media.DrawingContext.PushClippingRectangle no longer accepts negative width or height.
Microsoft.SPOT.Presentation.Shapes.Ellipse parameterless constructor removed (without replacement). The other one no longer accepts negative radiuses.
Microsoft.SPOT.Presentation.Shapes.Line constructor no longer accepts negative values.
Microsoft.SPOT.Presentation.Shapes.Polygon no longer accepts null or empty point arrays.
Replaced Microsoft.SPOT.Presentation.UIElement.StylusDown, StylusMove and StylusUp routed events with TouchDown, TouhMove, resp. TouchUp ones, and few standard events were added (TouchGestureEnd, TouchGestureChanged and TouchGestureStart). Similar changes happened to OnStylusDown/Move/Up methods. Width and Height properties no longer accept negative values.
Microsoft.SPOT.Presentation.UIElementCollection.Insert no longer accepts null.
Microsoft.SPOT.Dispatcher.BeginInvoke and Invoke methods no longer uses params for the arguments (which, by the way, removed a bug in BeginInvoke for parameterless methods). Use explicit array now (although the arg type is now object, you still need to pass an array in).
System.Collections.ArrayList.Contains no longer uses the IndexOf method. When overriding IndexOf, consider overriding Contains, too.
Removed System.Globalization.CultureInfo.IsNeutralCulture without replacement. Use cultureInfo.Name.IndexOf('-') < 0 to get the previous behavior.
System.Array members can no longer be overrided (Clone, CopyTo, GetEnumerator, IsFixedSize, IsReadOnly, IsSynchronized and SyncRoot were virtual). Its enumerator (SZArrayEnumerator) was unmarked as Serializable.
System.DateTime.MaxValue was lowered to 12/31/3000 23:59:59 and no later date can be created.
System.IO.StreamReader caches the decoder in constructor (though for parameterless Read method only). Not sure which way this will go but you might eventually got broken if determining/changing the decoder dynamically.

Noteworthy changes (since 3.0.7186.0):

DPWS discovery now supports discovery versions 1.0 and 1.1. Dpws.Client.Discovery.DiscoveryVersion, DiscoveryVersion10 and DiscoveryVersion11 were added to handle this, as well as the DpwsDiscoveryClient.DiscoVersion property. Version 1.1 is now being used by default.
Dpws.Client.Discovery.DpwsDiscoveryClient.DirectedResolve method added.
Other threads are now given a chance to execute while waiting for Dpws.Client.Discovery.DpwsDiscoveryClient to receive responses.
Dpws.Client.DpwsClient now uses multiple threads for the HTTP service host (equal to the number of service endpoints hosted).
Adhoc discovery can be turned off (using new Dpws.Device.Device.SupressAdhoc property). In such case, the device does neither respond nor send any discovery messages (Probe, Resolve, Hello). This might come handy when using a Discovery Proxy.
The maximum number of threads used for discovery as well as for services can now be set using the new Dpws.Device.Device.MaxDiscoveryThreads and MaxServiceThreads properties, respectively.
Multiple service types on single endpoint are now supported.
Properties of Ws.ServiceModel.ServiceContractAttribute, OperationContractAttribute and ServiceContractAttribute were implemented.
Objects returning 0 as their hash code are now accepted as initialized by Ws.Services.Serialization.DataContractSerializer.
Microsoft.SPOT.Bitmap has couple of new methods: RotateImage, Scale9Image, StretchImage with source offset possibility, and TileImage. Enjoy!
Support for large buffers (over 760 kB) was added by means of Microsoft.SPOT.Hardware.LargeBuffer and LargeBufferMarshaller classes.
Power management functions were separated and extended. Several power and sleep states were defined, as well as the ability to restart the device, or wake it up on specified events. See the Microsoft.SPOT.Hardware.PowerState and all associated classes and enums.
Watchdog feature is now supported by .NET Micro Framework. Several actions can be taken (device restart, bootloader, break debugger). Check the Microsoft.SPOT.Hardware.Watchdog and related classes.
Microsoft.SPOT.Hardware.SPI has new WriteRead method overloads, allowing to specify a number of bytes in the buffer to write out. (Use -1 to write all)
New Microsoft.SPOT.EventSink.PostManagerEvent method to inject native events into the system.
Microsoft.SPOT.Ink.InkCanvas was redesigned. Protected Init method was added, Clear now causes invalidation, and DefaultDrawingAttributes has now getter.
New event categories were added: PowerLevel, SleepLevel, TimeService and LargeBuffer.
Microsoft.SPOT.GenericEvent.Time is now DateTime instead of TimeSpan.
Couple of touch related classes were added to the Microsoft.SPOT.Touch namespace (TouchEvent, TouchInput, TouchInputFlags), to replace the previous stylus events.
New assembly dealing with device system time and synchronization. SNTP server synchronization was built-in (see KB 262680 for list of public SNTP servers). It also supports time changed and synchronization failure events, and is now the only way how to set a system time zone offset. The main class to look at is the Microsoft.SPOT.Time.TimeService.
Performance improvements in Microsoft.SPOT.Input.ProcessInputEventArgs and StagingAreaInputItem.

New color constants were added: Brown, Cyan, DarkGray, LightGray, Magenta, Orange, Purple, Yellow. Gray (now 128, 128, 128) and Green (now 0, 128, 0) color values were changed to match desktop WPF colors.
Microsoft.SPOT.Presentation.Media.DrawingContext has also couple of new methods: RotateImage, Scale9Image, StretchImage and TileImage. Set translation can now be read (using GetTranslation), and DrawPolygon and DrawEllipse support fills.
The coordinates of colors in Microsoft.SPOT.Presentation.Media.LinearGradientBrush can now be switched from absolute (previous behavior) to relative to bounding box (WPF behavior) - use the MappingMode field.
WPF renders dirty area only (used to always redraw the whole screen). Though, only one rectangle is used to keep track of dirty areas. (This is handled by the internal Microsoft.SPOT.Presentation.Media.MediaContext class).
Microsoft.SPOT.Presentation.Media.SolidColorBrush supports filling ellipses and polygons (it is the only such brush in this release).
Microsoft.SPOT.Presentation.Shapes.Ellipse supports thick strokes.
All shapes are now created with transparent fill by default.
It is possible to invalidate only part of UI control (using new Microsoft.SPOT.Presentation.UIElement.InvalidateRect method).
Bug fixed - Microsoft.SPOT.Application.OnEvent now reports events on correct target.
New System.Collections.Queue and Stack collections baked by high-performance native code. The ArrayList code was also moved to the native side for better performance.
New date time formats were added: 'R' or 'r' for RFC 1123 (ddd, dd MMM yyyy HH:mm:ss GMT), 'U' for full date time, 's' for sortable pattern (yyyy-MM-ddTHH:mm:ss), 'u' universal sortable pattern (yyyy-MM-dd HH:mm:ssZ), 'f' for long date yet short time, 'g' for general short time (short date + short time). Corresponding properties were added to the DateTimeFormatInfo.
It is now possible to get the executing assembly via System.Reflection.Assembly.GetExecutingAssembly. Assembly naming and versioning is provided using GetName method, and supported by Load and System.AppDomain.Load methods.
System.DateTime has a new constructor accepting DateTimeKind.
Random numbers generation was made .NET Framework compatible (via System.Random class).
System.Version can represent major.minor versions in addition to
New assembly bringing HTTP support into the framework, including HttpListener, HttpWebRequest, HttpWebResponse, proxy support and others.
Also includes System.ConvertBase64 for converting from and to Base64, and improved System.Uri.
System.IO.StreamWriter finally fixed to support writing out multi-byte characters.
System.Net.IPEndPoint defined MaxPort and MinPort constants.

Other and internal changes (since 3.0.7186.0):

General changes through assemblies not listed separately:

Private Dpws.Client.Discovery.DpwsDiscoveryClient.BuildProbeRequest now requires the discovery service address, use dpwsDiscoveryClient.DiscoVersion.WellKnownAddress value to get the previous behavior. Method body of the Resolve method was moved to new private BuildResolveRequest method. Probe (and private SendResolveRequest) methods no longer reuse the socket address.
Dpws.Client.DpwsClient introduced some integrity checks - whether host is already running in constructor, if anybody is attached to the HelloEvent before invoking (not so with the ByeEvent, though).
Bug fix in the internal constructor of Dpws.Client.DpwsServiceType (NamespaceUri and TypeName separation).
Private Dpws.Client.Discovery.DpwsDiscoveryClient.BuildByeMessage and BuildHelloMessage methods now requires the discovery service address, use Dpws.Device.Device.DiscoVersion.WellKnownAddress value to get the previous behavior.
Method bodies of Dpws.Device.Services.DpwsHostedService.GetStatus, Renew, Subscribe and Unsubscribe were moved into the Dpws.Device.Services.DpwsWseSubscriptionMgr class.
New internal Dpws.Device.Services.DpwsWseSubscriptionMgr.FixToAddress method which ensures the address is of type urn:uuid:. Private GetEventSink and GetStatusResponse methods were duplicated from the DpwsHostedService class.
Partial bug fix in the System.Ext.Xml.XmlWriter.WriteAttributeString - double quotes are trimmed from the value to be written.
System.Ext.Console.Write was marked as conditionally compiled in Debug releases only, which allowed several compiler optimalizations.
Ws.Services.Transport.HTTP.WsHttpClient was rewritten to use the new HTTP classes, and introduced a RequestTimeout variable.
Ws.Services.Transport.HTTP.WsHttpMessageProcessor and WsHttpServiceHost were also rewritten to use the new HTTP classes.
New Ws.Services.Transport.UDP.WsUdpServiceHost.IsRunning read-only property.
Internal Ws.Services.Transport.WsNetworkServices.GetLocalIPV4Address is now thread safe.
Some improvements in the internal Ws.Services.Utilities.DebugTiming class.
Ws.Services.WsWellKnownUri.WsWellKnownUri is no longer constant, it can even be set.
Microsoft.SPOT.Bitmap now implements IDisposable.
Microsoft.SPOT.IO.RemovableMedia now ignores any exceptions in the static constructor.
Private methods Microsoft.SPOT.Input.GenericDevice.ExtractRawGenericInputReport (merged into PostProcessInput with performance improvements), PreNotifyInput and PreProcessInput removed.
New (abstract) Microsoft.SPOT.Input.InputDevice.DeviceType property. This was added for performance reasons during input processing, but you can use it to detect the input device generic type (currently Button/Touch/Generic).
Microsoft.SPOT.Input.InputManager was redesigned. Several methods were merged, devices and their input events were separated (though still only one device per device type is supported) and made accessible through public properties (ButtonDevice, TouchDevice, GenericeDevice). This improved performance and extensibility.

Microsoft.SPOT.Presentation.Media.Brush.Opacity is now property instead of field. Internal render methods were added to support filling ellipses and polygons, which are not required to be implemented (only SolidColorBrush supports them out of the box).
Performance improvement in internal Microsoft.SPOT.Presentation.Media.DrawingContext.Close (which is called every render request).
Significant performance improvement in Microsoft.SPOT.Presentation.UIElement class - visibility handling was redesigned (used recursion) and is now being cached (internal IsVisibleCache flag was defined for this purpose), and changing the children collection (resp. the previously empty internal OnChildrenChanged method) causes updates to the visibility state. Other performance improvements includes using fields instead of properties, eg. in the frequent RaiseEvent method. Private thunk methods were also adjusted from stylus to touch philosophy. The protected, previously empty OnGenericEvent now handles the TouchGesture events, so be sure to call base when overriding. GetPointerTarget no longer fails when one of the children is null.
Some performance improvements in Microsoft.SPOT.Presentation.UIElementCollection (redundant checks removed in Add and Insert).
Private Microsoft.SPOT.Application.ReportInputCallback was removed (replaced by anonymous delegate).
Microsoft.SPOT.Dispatcher uses the new native Queue collection, less locking and uses DispatcherOperationStatus when abort requested (instead of silently removing it from queue). Private removed methods: DeQueue, EnsureStatics, StartShutdownImpl (merged) and PushFrameImpl (merged).
Bug fix in Microsoft.SPOT.DispatcherOperation (timers correctly use -1 ms to disable starting and signaling), removed internal Invoke method (merged into Dispatcher.PushFrame).
Removed internal Microsoft.SPOT.Touch.TouchCollectorConfiguration.SetNativeBufferSize interop, only static buffers are used at the moment.
Internal Microsoft.SPOT.Touch.TouchCollector redesigned, too. The TouchEventProcessor.ProcessEvent went native.
Private System.Collections.ArrayList.EnsureCapacity was removed.
Signature of private System.Reflection.Assembly.LoadInternal now requires version information.
System.AppDomain has public LoadInternal method for loadig assemblies with already parsed assembly names (Load is no longer external and does the parsing).
The internal array enumerator (System.Array.SZArayEnumerator) now supports circular arrays enumeration, see the source code for an example.
Some performance improvements in System.DateTime, fixed Equals method for optimized values.
Most of the System.TimeZone was moved from native to managed. CurrentTimeZone property returns an instance of new internal System.CurrentSystemTimeZone class.
Tiny performance improvements in System.IO.StreamReader - reusing character array, and bug fixes.
Microsoft.SPOT.Net.Security.SslStream.Read redundant available bytes for read check removed, and checks for socket validity during disposal.


This version was not available for public. Pre-Beta version announced on 7/23/2009. This release was Debug build, so making comparisons to other Release builds would take too much time, which I don't think it is worth that. Sorry.

Sign in using Live ID to be able to post comments.