In this section look into multithreading in WPF and how we can send long running task to a different thread than the UI thread. We will look at how the threading model of WPF works. We will also look into how we can load data in a different long running thread and then utilize that data through data binding. Also we will see how we can communicate with WCF from WPF.

WPF Threading Model

Responsive UI and Distributed Systems

In our application if we are dealing with data which is coming from remote system then we cannot deny the fact there can be network delays because of various reasons (Network congestion, Busy Servers, Packet Loss, higher round trip times, etc) and that could render our UI unresponsive. Other reasons for UI unresponsiveness could be long running IO tasks or slow CPU. So we should take care of this while designing the application and make sure the UI does not freeze in such conditions.

Dispatcher

The WPF threading model revolves around an object called as dispatcher. It can be considered as the object that owns the message loop for a particular thread. In any windows application all the mouse and keyboard inputs are sent via message sent to the thread associated with the target window. In WPF receives these messages and decides what to do with them. All WPF elements are associated with the Dispatcher. We can see this in the DispatcherObject base class. This is the base of DependencyObject which is root of WPF class hierarchy.

WPF Dispatcher

WPF Dispatcher

As we have seen that DependencyObject object is the base class for most WPF types and it in turn derives from DispatcherObject which derives from System.Object, the base class for all .NET objects. The DispatcherObject provides access to the object to which the Dispatcher is associated and it provides functions to check whether we are on the right thread or not. The Dispatcher is always associated with a particular thread and in most cases we need to be on that thread when we make any changes to the object on that thread. WPF makes use of these methods to make sure we are performing operations on the right thread.

  • CheckAccess – This will return false if we are on the wrong thread.
  • VerifyAccess – This will throw an exception if we are on the wrong thread.

So this is in accordance with STA model. The reason why WPF uses this model is to work with COM based API’s like clipboard, etc.

However it is technically possible for an application to have multiple dispatchers each on a different thread but each top level window needs to be on a single dispatcher. However its very common to have only one dispatcher for one WPF application. And also generally a WPF application has one UI thread but that’s not a constraint. So we cannot modify anything on the UI elements from the wrong thread means non UI thread directly. As all the user inputs are handled by the dispatcher so when we do any other task on that thread then the dispatcher will not be to handle the user input. So we should not block the UI thread to the functions that take long time to complete.

So how do we follow both the things I just said above because one says do all the work on UI thread to avoid exceptions and the second one says do no work on UI so that the UI is responsive.

Async Work

The answer is to perform slow work asynchronously either by using multithreading or some API’s. If we want to update the UI in between these tasks then we can use the Dispatcher to come back on the right thread for updating the UI. We can do this by calling the Dispatcher.BeginInvoke method and passing the method delegate to it. This will end up as a message in the message queue of the dispatcher and when the dispatcher processes this message in its queue it will invoke the specified method and make eth updates to the UI thread. This will make sure that the UI updates will happen always on the right thread no matter what thread we are on.

We can see how to do this in the image below. We have some slow work to do. As you can see this work has been put in an anonymous delegate and this is invoked by a thread in a thread pool. So we have delegated the slow work to some other thread so that the UI is responsive and when the slow work is completed and the UI needs to be updated then we have called Dispather.BeginInvoke to our UI update.

ThreadStart threadStart = somedelegate // We can use any type of delegate

{

DoSomeLongRunningWork();

Dispatcher.BeginInvoke(DispatcherPriority.Normal, (EventHandler) delegate

{

UpdateTheUI();

}, null, null);

};

threadStart.BeginInvoke(delegate(IAsyncResult asyncRes) { threadStart.EndInvoke(asyncRes); }, null);

Let’s see this action. Add a class in with the following code in your application to do the time consuming task.

 

WPF Async Work

WPF Async Work

Now add the following code to the xaml of the application.

 

WPF Async Work

WPF Async Work

Add the following code to the code behind.

 

WPF Async Work

WPF Async Work

When we run this code we will notice that during the time our time consuming task runs the ui is responsive and if we have a look at the Thread ids we will notice that we ran the Time consuming task on a different thread then the other tasks and in the end we used Dispatcher object to Update the UI.

 

WPF Async Work

WPF Async Work

Dispatcher Priorities

As we have seen the previous section that we specified DispatcherPriority.Normal in the Dispathcer.BeginInvoke method. The different dispatcher priorities are as below and these are increasing order of priority. For example the DataBinding has higher priority than rendering. This is how it should be. Say we have an application that databinds all the elements on a page and suppose the data binding for all the elements is updated then we do not want call render for each element separately. So we just get one painting of the UI.

  • System Idle
  • Application Idle
  • Context Idle
  • Background
  • Input
  • Loaded
  • Render
  • DataBind
  • Normal
  • Send

DispatcherOperation

This is returned by Dispatcher.BeginInvoke and can be used to track the progress of the work.

  • Status Property – It has the status property which tells us whether the operation is still pending in the queue or executing or finished or aborted.
  • Result Property – It also has a result property that can be used to get the outcome of the operation if there was any.
  • Priority Property – The objects also provide access to the operations priority as well.
  • Completed Event – Called when the operation completes.
  • Aborted Event – Called when the operation aborts.
  • Wait Operation – This method block until the operation completes and if the operation has already completed before we have called wait then wait returns immediately. You need to be cautious while using Wait because you are blocking the worker thread till the UI operation is completed and this might lead to a deadlock as the UI thread might be waiting for the Worker thread to finish up.
  • Abort Operation – This operation aborts the operation if the operation is still waiting in the queue. If the operation has already started or finished the Abort does nothing.

Synchronization Context

Instead of using the Dispatcher.BeginInvoke we can use the SynchronizationContext.Post method to make the updates to the UI. This was introduced in the version 2.0 of .NET and also works for Windows Forms and ASP.NET. A dummy implementation for this is shown in below.

SynchronizationContext synchronizationContext = SynchronizationContext.Current;

ThreadStart threadStart = delegate 
{
    DoLongRunningWork(); 
    synchronizationContext.Post(delegate 
    {
        UpdateUI();
    }, null);
}; 
threadStart.BeginInvoke(delegate(IAsyncResult asyncResult)
{ 
    threadStart.EndInvoke(asyncResult);
}, null);

 

Asynchronous Options

Let’s have a look at the various asynchronous options available with .NET.

.NET v 1 asynchronous pattern

Whenever we see two methods, one called Begin___ and the other called End___ we know that we are using .NET v1 Async pattern. The Begin___ method needs to return result of type IAsyncResult and should also allow you pass a Callback function that will notify the completion of the method. The types that support this pattern are as below:

  • All delegates support this pattern
  • All networking classes implement it
  • All web service proxy classes implement this including WCF

The major advantage of using this pattern is that we gain a lot on the efficiency of the pattern. Just like the concurrent threads work in the Windows Operating system, the same the way this implementation needs the CPU time at the start and end of the operation explicitly and the remaining work is done concurrently. Like if it’s an IO task then it’s handled asynchronously by specialized hardware. So the major advantage of this pattern is its efficiency and we manage thousands of network operations with a few threads.

But this might not be very useful for a WPF application as the main use of threading in a WPF application if just maintain the responsiveness of the UI.

.NET v2.0 event-based asynchronous pattern

This pattern was introduced with .NET 2.0 and is more suited for user interface development.

In this pattern we will find methods of type ___Async and CancelAsync or ___AsyncCancel. So this pattern supports cancellation in scenarios where it can be done.

Another feature that we see in this pattern is that an event will fire when the operation completes and also when the progress of the task is changed.

And the most important thing to notice is that these events are raised on the user interface threads. This is a mandatory requirement for the components implementing this pattern. This is generally done by SyncronizationContext or AsyncOperationManager to make sure the events are raised on the thread on which the operation was invoked.

The advantages of this pattern are that it offers cancellation and is simple to use. The major advantage of this pattern is that presents a Single threaded API for multithreaded operations. So when are using a component that implements this pattern we don’t see anything other than the dispatcher thread for Async operations. So we call the Async work from the UI thread and we get the completed notifications back on the UI thread.

We have seen an example of this implementation in the Printing section. The XPSDocumentWriter offers the WriteAsync and CancelAsync methods.

So this method seems perfect for WPF but the couple of cons for this pattern are that it is not widely supported and it does not support the WaitHandle available in the V1 Pattern.

Thread Pool

Some components offer nothing but a synchronous blocking API. We saw this in the section where I showed you the TimeConsumingTask. So we need to go and manage the blocking and unblocking of the thread.

We could use a Thread Pool for it. .NET always provides pool of thread to do random work on random threads. .NET dynamically creates and destroys thread to meets the applications workload and this is really helpful in synchronizing the unhelpful synchronous components. You should remember that anytime we are using a delegate asynchronously we are using the thread pool internally.

The V1 and V2 of .NET asynchronous also use the thread pool in some implementations like the background worker class.

The only problem in working with thread pool is to get back to the UI thread when the work is done.

Create your own thread

Finally the last option is create our own worker thread. The major advantage of creating your thread is to have less concurrency. Yes it’s an advantage in terms of WPF because the only reason for asynchronous work is to ensure the responsiveness of the WPF UI.

The best way to go for a WPF application is to have one worker thread and one UI thread. And having only 2 threads will simplify the concurrency issues as we know what work is being done on what thread.

The only disadvantage with this is that there is no direct support for this approach in .NET library so we have built up our own mechanism to pass the messages between the worker thread and the UI thread. It’s not a lot of work as we just need a queue and some synchronization. But we should not be hesitant for the approach a little work upfront will give a lot of flexibility.

Databinding and Threading

In the previous sections we have seen how we can update the UI coming back from the worker thread. Now we will see how we can update the UI if we are using data binding. This is useful in the cases our data source is producing the change notifications. Add the following class and code to you application. This class will provide datasource which provides slow data. As we can see in the code the get accessor is fast but the set accessor is fetching the updates. The FetchNewData method simulates the slow operation. We are using the thread pool to get the work done and then we are sleeping on the thread for 5 seconds and then the property is updated. Also you can see that this class implements the INotifyPropertyChange to implement the change notifications.

 

WPF Databinding and Threading

WPF Databinding and Threading

This is used as the source for the UI as we can see in the code below. This source becomes the DataContext of the Window.

 

WPF Databinding and Threading

WPF Databinding and Threading

And we go to the xaml we will see that the textblock’s text property is bound to the data property of the DataContext.

 

WPF Databinding and Threading

WPF Databinding and Threading

WPF will take care of this as you can see by running the application.

 

WPF Databinding and Threading

WPF Databinding and Threading

However this is supported only in case of properties for the current version of WPF. If we are using a list and using data binding on the list with multithreading then we will get an error. So WPF actually offers only partial support for Async updates. Maybe the future versions might offer it as currently WPF does not offer a CollectionView that support changes to its collection from a thread different from a dispatcher thread.

We can change our approach to get this done. For example we can create our ObjectDataProvider (ObjectDataProvider.IsAsychronous) on the worker thread instead of the UI thread. And we can also set the binding on a particular element to be Async (Binding.IsAync).

I do not recommend this approach because xaml is not the place to handle the threading issues. So we are usually better off handling these issues in the DataSource.

WCF and WPF

WCF and v1 Async Pattern

If we are using WCF along with WPF then we can use the Async proxy class generated by WCF to perform work asynchronously. This can be done in two ways

  • While generating the Async class via command line we can affix /async at the last of the svcutil.exe command
  • Or in Visual studio while adding the service reference we can configure it work Async.

This setting will make the generated proxy to implement the .NET v1 Async pattern. This does not require any implementation form the server as this is just the way we want WCF to present the proxy.

svcutil.exe http://services.msdn.microsoft.com/ContentServices/ContentService.asmx?wsdl /language,C# /async
 
[ServiceContract(Namespace="urn:msdn-com,public-content-syndication", ConfigurationName="ContentServicePortType")]
public interface ContentServicePortType { 
[OperationContract(AsyncPattern=true, Action."urnmsdn-com:public-content-syndication/GetContent", ReplyAction."*")]
IAsyncResult BeginGetContent(GetContentRequest request, AsyncCallback callback, object asyncState); 

GetContentResponseEndGetContent(IAsyncResult asyncResult);

WCF and DataBinding

WCF also offers some help for the databinding as well. The svcutil has the option which will implement the INotifyPropertyChange on the types generated form the schema.

This is useful when the WPF application using a simple visual layout only directly over WCF service.

 

Any questions, comments or feedback are most important.

The code for this post can be found here.

 

Styles

Styles give our applications and elements consistent look and feel. In this section we will see how style hooks up to the resource system and property system in WPF. We will also see how to specify triggers in styles and how to specify default and custom styles.

A style is a named group of settings that will define the elements will appear. As you can see in the image below the basic structure of style contains a list of setter elements which specify a target property and a value. A style provides a way to set properties of a type of element and in WPF these properties are Dependency properties.

 

WPF Styles

WPF Styles

Applying Style

All the elements in WPF have style property. Generally we use a resource reference in the elements style property however we can also set it inline. The main motive behind defining a style is that the same style will apply to multiple elements and will give consistent look and feel to the application. We can define style at the

  • Element scope
  • Window Scope
  • Application scope

We provide the x:key attribute to the style so that the elements can refer that resource.

 

WPF Applying Styles

WPF Applying Styles

We can also define the style as shown below by specifying the TargetType of the style and this style will automatically apply to all the elements that are of that type unless specified otherwise.

 

WPF Applying Styles

WPF Applying Styles

We can use this property of the styles to skin our applications by the use of resource dictionaries. We can put the styles defining target types in both the resource dictionaries and switch between then to change the theme of the application.

Extending Styles

In WPF we can define new styles that are using other styles as the starting point. This can be done by using the BasedOn property of a style. We can change or add the needed properties. You should remember that we cannot apply multiple custom styles to an element so this BasedOn property helps us.

 

WPF Extending Styles

WPF Extending Styles

Styles vs. Local Properties

When we set a property using a style it works the same way as setting the property any other way.

But there is something that only style can do and not properties. In a style we can add properties that do not match the target type as shown below. In this case the WPF elements will apply the property that makes sense and will ignore the rest of the properties.

 

WPF Styles vs. Local Properties

WPF Styles vs. Local Properties

 

Triggers

The styles support same range of triggers as control templates. However the targets of the trigger in style are the target elements whereas in the ControlTemplate the targets are the named elements.

 

WPF Triggers

WPF Triggers

Animation Property Trigger

As we have seen in the graphics section that the only trigger we set on an element is the Event trigger. We cannot set a Property trigger on an element directly so we can use style for this. That style can be inline or resource style.

 

Animation Property Trigger

Animation Property Trigger

Animation Event Triggers

As we can see in the image below we can also put event triggers in the style.

 

Animation Event Triggers

Animation Event Triggers

Items Container Style

When we are working with ItemsControls like the ListBox or a TreeView we generally define the DataTemplates for the ListBoxItem or a TreeViewItem to make use of DataBinding. When are not proving these specified conatiners to the items then WPF is doing that for us. This means WPF wraps the contents of DataTemplate in a ListBoxItem for a ListBox and in a TreeViewItem for a TreeView. Now, if we apply properties to these will not work well while working with Data Binding. So what we need to do is define the style of type ItemContainerStyle.

 

Items Container Style

Items Container Style

 

Items Container Style

Items Container Style

Styles, Templates and Controls

Styles enable controls to be visible by default. As we have seen in the previous sections that the controls depend on templates for their appearance. Also the controls get their templates form the themes\generic.xaml or theme specific resource dictionary. These default styles set much more than a template. We should hard code as less as possible about a control in the template. The default styles sets properties like default background, font, etc. As you can see in the image below we have applied a local style to a button but we have just set the font size where does the button get the other properties form?

 

WPF Styles, Templates and Controls

WPF Styles, Templates and Controls

So what’s happening is that the local style for the button is setting the font size for the button and default style sets all the other properties for this button. So both the styles are merged and used in the button.

Any questions comments or feedback is most welcome.

The Code for this post can be found here.

 

In this section we will see how we can add printing support in WPF applications. We will start off with printing and XPS and then move on to XPSDocumentWriter and then we will have a look on how to work with print options and customize print dialog.

XPS – XML Paper Specification

The API for printing is the same as the API for creating the XPS document. XPS has two important features.

  • It provides native print spool option which is useful for WPF printing. XPS is designed to WPF native graphics model efficiently. In theory XPS can go to the target device and rasterized there to provide maximum fidelity. Although in practice most printers don’t know how to render xps but this was the design while designing XPS.
  • XPS acts as the fixed layout document format i.e. like pdf version of the WPF.

We can generate a XPS document by printing something using the Microsoft XPS Document Writer virtual printer. This is available on machines that have .NET 3.0 installed. When we print something using this device it saves a document in XPS format on the disk.

XPS Document Writer

XPS Document Writer

The default viewer for XPS is internet explorer. It’s a file that contains all the pages to be printed. If we zoom in we will see that the text is scaling properly.

The file convention is based on what the office files use. If we change the extension of the file from .xps to .zip and extract the contents of it then we will see that there is a documents folder.

 

WPF PRint Documents Folder

WPF PRint Documents Folder

If we go inside it we will see that there is a pages folder which will contain a file corresponding to each page.

 

WPF Print Pages Folder

WPF Print Pages Folder

When we open these pages in visual studio we will see WPF elements in it so this is xaml with base as FixedPage. All the shapes are rendered by Path. The text that XPS uses is Glyphs which derives from shape and it helps us define how the text looks like by using shapes. Glyph is a much lower level way of handling text than a text block. You should know that XPS does not use all the elements of xaml but only a limited set as all the systems running xps might not be running .NET

 

XPS Page in XAML

XPS Page in XAML

The font is specified as a file in a relative URI in the resources dictionary. These have scrambled names. The resources folder also has all the bitmaps in use as well. There are generally the Bitmaps of the text for which the licensing is not available for distribution.

 

WPF XPS Fonts

WPF XPS Fonts

The directory structure shown below is just for the user’s convenience.

 

WPF XPS Directory Structure

WPF XPS Directory Structure

We should look at the .rels file to see the entry points into the package. It contains a series of relationships which are the links identified by the URI. The document that we have has 3 relationships.

  • The namespace
  • The entry point called FixedDocumentSequence.fdseq. This contains the links to all the pages. These roots types are all reflecte din the API
  • Identifies the metadata i.e. thumbnail

 

WPF XPS .rels

WPF XPS .rels

XpsDocumentWriter

The class used for creating the XPS document is the same as the class for printing in WPF. It is XpsDocumentWriter. The target for the writer (XPS file or Printer) depends on from where we got the writer handle in the first place.

If we get the writer from the PrintQueue then the writer will write to the printer.

 

XpsDocumentWriter

XpsDocumentWriter

If the writer from XpSDocumnet’s CreateXpsWriterWriter method then the output will go to xps file on disk.

 

XpsDocumentWriter

XpsDocumentWriter

Let’s see this in action. Add the following code to the click handler of a button.

 

XpsDocumentWriter

XpsDocumentWriter

Now when we run the application then we ask the PrintQueue to give us a XpsDocumentWriter and to get that we just pass a null printable area. After that we will get an option to choose the printer as we have not already done that.

 

XpsDocumentWriter

XpsDocumentWriter

We select the actual printer and click on print. The PrintDocumentImageableArea contains the dimensions of the paper we are printing on. The Media Size height and width tells us the size of the paper. As you might know that we cannot print all the way to the end of the paper as it might put ink to the printer edges. So we have a margin specified via OriginalHeight and OriginalWidth. The units are in DPI i.e. 1/96th of an inch.

 

XpsDocumentWriter

XpsDocumentWriter

Then we return back to the application and the code for creating a textblock is executed. This will be the visual tree that we will be printing. As you can see in the code we have assigned the top and left margin the same as to where the paper can print.

Next we need to create the layout. This would have been automatically if our visual tree was hosted inside a window but as there is no window we need to do it. So measure, arrange and update the layout.

Then we print the document.

If we use the Microsoft XPS Document Writer as the printer

 

XpsDocumentWriter

XpsDocumentWriter

Then we will have the OriginalHeight and OriginalWidth as 0 in the PrintDocumentImageableArea.

 

XpsDocumentWriter

XpsDocumentWriter

Now when we reach the write method we get to choose the save location of the xps document.

 

XpsDocumentWriter

XpsDocumentWriter

The XPS file looks something like this. As the virtual printer told us that there is no margin the text is next to the edge.

 

XpsDocumentWriter

XpsDocumentWriter

Printing Multiple Pages

We cannot call the Write method twice as it will throw an error. So we need to follow a different technique to print multiple pages. We need to use the SerializerWriteCollater to print multiple pages. We call the BeginBatchWrite to start the print spooling process and then we will call EndBatchWrite after the finishing the print job. We can use the code below to see multiple pages printing works.

 

WPF Printing Multiple Pages

WPF Printing Multiple Pages

The XPS document will contain 10 pages.

 

WPF Printing Multiple Pages

WPF Printing Multiple Pages

Document Paginator

In the previous section we how we can print Visual Trees. The overloaded write method of the XpsDocumentWriter takes a DocumentPaginator as input. DocumentPaginator is an object that knows how to display content in pages. FlowDocument, FlowDocumentPageViewer, FixedDocument uses this IDocumentPaginatorSource.

 

WPF Document Paginator

WPF Document Paginator

Multi Page – XPS

We can get a detailed control over the print document by handling the XPS object itself. The write method has 3 overloads that accept

  • FixedPage – For printing a single page.
  • FixedDocument – For printing single document
  • FixedDocumentSequence. – For printing Multi document print job
WPF Multi Page XPS

WPF Multi Page XPS

 

Let’s see this in action. In the code below we can see that we have added a FixedDocument that contains Fixed Pages. The FixedPage has a children collection that will contain as many items as we like and we have positioned them like we position children in a canvas. Then we add the page to the FixedDocument. We need to provide the PageContent that will go in to the PageDocument sequence and this will contain the links to the actual child pages itself. So we build the Page content and then point that at the child FixedPage object itself. IAddChild is how we add children to elements.

 

WPF Multi Page XPS

WPF Multi Page XPS

And the output looks something like below.

 

WPF Multi Page XPS

WPF Multi Page XPS

Asynchronous Printing

All the methods offered by the XpsDocumentWriter are also available in the Async form like WriteAsync. These perform the printing process using the User Interface’s thread idle time. The progress change and Progress complted eventes are raised for tracking the progress of the print process. It also provides a CancelAsync method that cancels the printing. For all this to work we need to be running in WPF User Interface thread that’s running a message loop as this requires the idle time.

PrintTicket

The PrintTicket class represents some of the common features like Collation, orientation, resolution, quality, etc. these are the printer properties that are available when will click on printer properties button in the print dialog. It is also extensible so that the printer specific settings can be attached to the PrintTicket.

PrintTickets can have different TicketScopes like document, print job or a page.

We can get the default print settings of the printer from the PrintQueue object of the printer. There are two properties:

  • UserPrintTicket – Contains user defaults
  • DefaultPrintTicket – Contains system wide defaults

As you might expect that all print cannot do everything so we can make use of PrintCapabilities class to get the Valid PrintTicket options for specific printer and the printer specific custom options.

PrintDialog

In the previous section we saw that the PrintDialog was automatically popped by WPF when the printer selection was required. But we can do this using the code as well. And me will need to do it via code at places where we need to find out the capabilities of the printer, etc. And then can set or get various printing options.

 

WPF PrintDialog

WPF PrintDialog

Queues and Servers

The classes PrintDialog, PrintTicket and PrintQueue (It is specific to a printer) are part of System.Printing namespace introduced by .NET 3.0. We can use this API to configure remote print server or PrintQueue. It also provides configuration options, discovery and monitoring. PrintServer represents a particular class with printers attached and can provide PrintQueue for each of the connected printers.

Any questions, comments and feedback is most welcome.

The Code for this post can be found here.

 

Microsoft has released a 90-day test edition for its last version of Windows 8 operating system, which is slated to go on selling on October 26 this year. The run, withal, is obtainable only for the Enterprise edition of Windows 8 and is aimed at developers who think to shape apps, and IT administrators who requisite to try out the new OS before making their pick to migrate, all onwards of its adjudicator commencement. Microsoft recently released closing variant of Windows 8 to MSDN and Technet subscribers.

 

The Windows 8 Task test edition is available in 32 and 64 bits versions. To download the operating group, users require to tally a subscription to Windows Lively. Also, users require to score a 1GHz processor with 1GB of RAM and 20GB of hard disc character as minimum falsification responsibility. A determine of run ISO images are also provided for a tracheophyte of languages in x86 (32-bit) and x64 (64-bit)versions.

 

The Task edition comes with all the features of Windows 8 Pro and is statesman business-focused. It has options much as Windows To Go (which allows Windows 8 installation from a USB key).

 

If you are preparation to download the experiment association, beneath are many pointers before you commencement:

The rating edition testament suspire and cannot be upgraded.

To advance, the assessment must be uninstalled and a non-evaluation writing of Windows staleness be re-installed from your innovational instalment media.

Ponder spouting the evaluation edition in a realistic environment or instalment on a other semihard road or partition. The gift reckon you to rise your example Windows beginning to Windows 8.

During body (required) you staleness login with a Microsoft declare and furnish your canvass, e-mail tact and country.

You are required to change the fluid online within 10 life after installment.

Formerly the valuation is installed, you cannot grade. To turn to a old type of Windows, you moldiness do a unqualified pose from your model artifact media.

 

For more details on activation click here.

 

The rivalry between Apple and Google has reached a new superlative — Apple has declared that the latest type of their ambulant OS, iOS 6, which testament run on the iPad, iPhone and iPod speck, testament not countenance the touristed video moving app, YouTube, someone out of the box. The boys at Cupertino say that the app faculty be disposable on iOS, but won’t be a place impede fail.

 

 

Still, the video streaming accommodation will be noneffervescent useable to users via the web browser.

 

The removal of YouTube as a individual app is a bit of a downer for users, and sure intensifies the tension between the two technology giants. Apple had recently announced that it would be replacing Google Maps in iOS with its own maps app.

 

Currently, Apple and Google are the marketplace dominators with their several rangy OSes i.e., iOS and Humanoid respectively.

 

Apple seems to be action all the indispensable steps to size itself from competition Google. What remains to be seen is whether Google module stay as the fail investigate for Apple’s devices or Apple is preparation up whatsoever deciding for that as fortunate.

 

Google and Apple are the two companies that feature had rattling honorable relations in the medieval, to the muzzle that sometime Google CEO Eric Statesman was a relation of Apple’s dwell of directors. The relationship between the two companies, still, has seen a downfall in the early deuce of eld. One of the crucial reasons of the downfall was that according to the latish Steve Jobs, the Robot OS is a somebody of iOS.

 

How the removal of the endemic app from iOS 6 testament concern the users works remains to be seen. What do you expect? Was it a wise displace to remove Google Maps and YouTube from iOS?