In-Depth

Build a Simple Device Application

Avoid common pitfalls with these step-by-step instructions for writing your first device application.

Now that you're familiar with what's available and what's required in Microsoft's device development space it's time to build an application. Your first application will be a device application that, like a Windows application in the desktop framework, will have a UI component. You will use Windows Mobile 6 to create this application.

Other types of projects for Smart Device Development include a console application, a control and a class library. You'll explore these project types in later installments of this column.

By design, Pocket PCs and Smartphones are disconnected, that is they don't always have a direct connection to a network. As you begin to design and write your device application, you must plan for a new paradigm: connectivity. The functionality of your application will include the ability to check if a connection exists.

Getting Started
Open Visual Studio, and create a new project. Next, add a button control and a label. You can use Figure 1 as a guide.

First, you must check if you have a connection to the internet. You can use several methods to perform this check. For this application, use objects from the System.Net namespace. Call the code shown in Listing 1 from the button click event.

This method takes no parameters; the required fields are populated in it. As a test site, attempt a connection to the Microsoft Web site where credentials are not required. Notice in Listing 1 that if you get back a valid HttpWebResponse and it has a Status of OK, then True is returned from your method. Any other return from your call to GetResponse will be False.

Here is the code that you must add to the event handler for your button click:

if (CheckConnectionState())
    lblConnectedState.Text = "Yea, we can see out!";
else
    lblConnectedState.Text = "No Connection found.";

Next, run your application using the Windows Mobile 6 Professional Emulator, and tap on your button. Unless you've been playing with the emulator, you should see your label change to "No connection found" (see Figure 2). By default, your emulator is not connected to a network. You need to "cradle" the emulator to get a connection, just as you would your Windows-based phone.

To cradle the emulator, select "Device Emulator Manager?" from the Tools menu in Visual Studio. When you open this dialog, your list will show a little green arrow in the circle next to the Professional Emulator (see Figure 3). This icon tells you that the device is running and connected. Right-click the Windows Mobile 6 Professional Emulator, and select Cradle from the Context menu. Your emulator will connect to your computer through Active Sync.

You may encounter two problems when connecting your emulator. First, ActiveSync supports only one connected device at a time. If you have a Smartphone or another Pocket PC device connected to your system, then you will need to remove it before the emulator can connect. Second, you may need to change a setting in ActiveSync on your desktop. Open ActiveSync, and select "Connection Setting?" from the File menu. For the emulator to connect, ActiveSync must connect to your emulator through direct memory access (DMA). Check the box next to "Allow connections to one of the following:" and select DMA in the combo box. Figure 4 shows your Device Emulator Manager once you have cradled the emulator.

After you've completed this, run your application and tap the Check Connection button. You should receive a message saying that you have a network connection. But, what about that delay when the application is checking the connection? Is it working? Is it broken? You tap the button and nothing happens for up to 20 seconds (that's the timeout that you used in the code).

You need a UI clue to tell your users that an action is occurring (users love that kind of thing). In the button event, you can set the current cursor to WaitCursor, and then reset it before you leave the event. But what if the event raises an exception? You may leave the method without resetting the cursor to Normal. To prevent this, create the new class shown in Listing 2. Listing 2 uses the IDisposable interface to allow you to write unique code for the button event:

using (CursorWait cw = new CursorWait())
{
    if (CheckConnectionState())
        lblConnectedState.Text = "Yea, we can see out!";
    else
        lblConnectedState.Text = "No Connection found.";
}

Finally, if your CheckConnectionState method raises an exception, the using statement will make sure that the Dispose method of the CursorWait class is called — thereby resetting the cursor to its default state.

You've written your first application; congratulations! In addition, you have learned some tricks for resolving problems that tend to frustrate developers who are moving from desktop to device development.

About the Author

Dan Fergus is the chief architect at Forest Software Group, developing .NET applications, including Pocket PC sports team applications. He speaks at major conferences, does consulting, and teaches Compact Framework, VB.NET, and ASP.NET courses. He coauthored The Definitive Guide to the .NET Compact Framework (Apress). Reach him at [email protected].

comments powered by Disqus

Featured

  • Cloud-Focused .NET Aspire 9.1 Released

    Along with .NET 10 Preview 1, Microsoft released.NET Aspire 9.1, the latest update to its opinionated, cloud-ready stack for building resilient, observable, and configurable cloud-native applications with .NET.

  • Microsoft Ships First .NET 10 Preview

    Microsoft shipped .NET 10 Preview 1, introducing a raft of improvements and fixes across performance, libraries, and the developer experience.

  • C# Dev Kit Previews .NET Aspire Orchestration

    Microsoft's dev team has been busy updating the C# Dev Kit, a Visual Studio Code extension that enhances the C# development experience by providing tools for managing, debugging, and editing C# projects.

  • Hands On: New VS Code Insiders Build Creates Web Page from Image in Seconds

    New Vision support with GitHub Copilot in the latest Visual Studio Code Insiders build takes a user-supplied mockup image and creates a web page from it in seconds, handling all the HTML and CSS.

  • Naive Bayes Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the naive Bayes regression technique, where the goal is to predict a single numeric value. Compared to other machine learning regression techniques, naive Bayes regression is usually less accurate, but is simple, easy to implement and customize, works on both large and small datasets, is highly interpretable, and doesn't require tuning any hyperparameters.

Subscribe on YouTube

Upcoming Training Events