Some reasons for developing a desktop application:
- The application doesn’t have to be connected to the internet
- You can interact better with the user’s PC. Web applications run in a sandbox environment and block almost all interactions.
- Desktop apps have better performance than web apps
- Running serious algorithms on the client side is possible but much harder with a web application.
- Utilizing Threads is much easier and more effective in a desktop application.
- Sometimes you don’t care if the application will be Web or Desktop, but your team is more experienced with Desktop technologies
There are a lot of UI Frameworks for desktop application:
UWP – Universal Windows Platform – Microsoft’s newest Desktop Application technology. It’s XAML based, like WPF, and you can write in C#, VB.Net, and C++ but most applications are written in C#. It works only on Windows 10 and the deployment is through Microsoft Store. The application works in a Sandbox Environment so it is limited in the interaction with the PC. Difficult learning curve.
WPF – A popular mature (available from 2006) XAML based Microsoft technology. You can write in C# or VB.NET. It is very powerful in terms of Styling and Binding capabilities that are fitted for big applications. It can run on any Windows OS. Relatively steep learning curve.
WinForms – An older Microsoft technology, very popular before WPF. Unlike WPF and UWP, WinForms relies on Visual Studio Designer’s drag and drop interface making it very productive. It can run on any Windows OS. Easy to learn.
Electron – A framework that allows developing Desktop apps with Web technologies (HTML/CSS/JavaScript). The magic behind Electron is that it uses Node.Js and Chromium to create a Web View in a desktop window. Interacting with the PC is much less capable than in other technologies.
JavaFX and Swing – Java UI frameworks from Oracle. Both are cross-platform and written in Java. JavaFX is newer and encouraged by Oracle as a replacement for Swing.
Qt – A cross-platform, C++ based UI framework. You can write the UI objects in code or use QML, which is a declarative language somewhat similar to JSON.