{{ !articles[0].partner.isSponsoringArticle ? "Platinum" : "Portal" }} Partner

Yet another Beeping P/Invoke Demo (SL5 RC)


You might have noticed that the Silverlight 5 (Release Candidate) is out. One of the new features included in the RC is the ability to call P/Invoke. In this short demo, we will write a Silverlight 5 application that uses the feature.

Tools needed:

Getting Started

Go ahead and open Visual Studio 2010 SP1 and select File->New Project then Silverlight Application.


By default, we have a new option called “Silverlight 5” selected as the Silverlight Version. Let’s go ahead and leave it at that. You also have the ability to select Silverlight 3 or 4 from this drop-down.


Let’s go ahead and Right click on our project and select Properties.


Put a check in “Enable running application out of the browser”.


Now go ahead and put a check in “Require elevated trust when running outside the browser”.


Switch back over to the MainPage.xaml and add in the following code:

<Grid x:Name="LayoutRoot" Background="White">
    <Button Height="23" HorizontalAlignment="Left" Margin="169,132,0,0" VerticalAlignment="Top" Width="75" x:Name="btnclick" Content="click" Click="click_Click" />

This will simply put a no thrills button on the page that the user can press to call the P/Invoke code we will add shortly.

Let’s go ahead and add a new class to the project.


Let’s call it PlatformInvokeTest.cs and add the following code (Note: If your having a problem getting it to work then use my solution at the bottom of the post):

using System;
using System.Runtime.InteropServices;

namespace SilverlightApplication26
    public class PlatformInvokeTest
        public static extern bool Beep(int frequency, int duration);

        public static void PlaySound()
            Random random = new Random();
            for (int i = 0; i < 50; i++)
                Beep(random.Next(10000), 100);

Let’s switch back over to the MainPage.xaml.cs and add the following code:

using System.Windows;
using System.Windows.Controls;

namespace SilverlightApplication26
    public partial class MainPage : UserControl
        public MainPage()

        private void click_Click(object sender, RoutedEventArgs e)

Now when the user fires up this project the application will go out of browser and the computer will beep multiple times in a different frequency each time.

You can also get this same functionality in-browser by going back to the Properties page and selecting “Require elevated trust when running in-browser”.


The only thing to note is that the .aspx page is no longer set to the default in your web project so you will need to do a “View in Browser” on your .aspx page in order to test.



As you can see it is very easy to use P/Invoke in a Silverlight 5 application. This sample was pretty simple but image the possibilities such as detecting when a USB key is inserted into a PC and copying files onto it through a Silverlight 5 application? Pretty cool stuff!

If you want the source code to this application and other Silverlight 5 demos then be sure to check out Michael’s “Mega Collection of #Silverlight 5" Demos.

Published at DZone with permission of {{ articles[0].authors[0].realName }}, DZone MVB. (source)

Opinions expressed by DZone contributors are their own.

{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks