如何在 Silverlight 5 中使用 PInvoke
了解如何在 Silverlight 5 RC 中开始使用 P/Invoke。
引言
您可能已经注意到 Silverlight 5 (候选发布版) 已经发布。 RC 中包含的新功能之一是调用 P/Invoke 的能力。 在这个简短的演示中,我们将编写一个使用该功能的 Silverlight 5 应用程序。
所需工具
- 需要 Visual Studio 2010 SP1 或 Visual Web Developer Express 2010 SP1 来开发 Silverlight 5 RC 应用程序。
- 在安装 VS2010 SP1 或 Visual Web Developer Express 2010 SP1 之后,您需要下载并安装 用于 Visual Studio 2010 SP1 的 Silverlight 5(候选发布版)工具。
入门
继续并打开 Visual Studio 2010 SP1,然后选择文件->新建项目,然后选择 Silverlight 应用程序。
默认情况下,我们有一个名为“Silverlight 5”的新选项被选为 Silverlight 版本。 让我们继续保持不变。 您还可以从此下拉列表中选择 Silverlight 3 或 4。
让我们继续右键单击我们的项目并选择“属性”。
选中“启用在浏览器外运行应用程序”。
现在继续选中“在浏览器外运行时需要提升的信任”。
切换回 *MainPage.xaml* 并添加以下代码
<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" />
</Grid>
这将在页面上简单地放置一个简陋的按钮,用户可以按下该按钮来调用我们稍后添加的 P/Invoke 代码。
让我们继续向项目中添加一个新类。
让我们将其命名为 *PlatformInvokeTest.cs* 并添加以下代码(注意:如果您在使其工作时遇到问题,请使用我帖子底部的解决方案)
using System;
using System.Runtime.InteropServices;
namespace SilverlightApplication26
{
public class PlatformInvokeTest
{
[DllImport("kernel32.dll")]
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);
}
}
}
}
让我们切换回 *MainPage.xaml.cs* 并添加以下代码
using System.Windows;
using System.Windows.Controls;
namespace SilverlightApplication26
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void click_Click(object sender, RoutedEventArgs e)
{
PlatformInvokeTest.PlaySound();
}
}
}
现在,当用户启动此项目时,应用程序将脱离浏览器,并且计算机每次都会以不同的频率发出多次哔哔声。
您还可以通过返回“属性”页面并选择“在浏览器中运行时需要提升的信任”在浏览器中获得相同的功能。
唯一需要注意的是,* .aspx* 页面不再设置为 Web 项目中的默认页面,因此您需要在 * .aspx* 页面上执行“在浏览器中查看”以进行测试。
结论
如您所见,在 Silverlight 5 应用程序中使用 P/Invoke 非常容易。 这个例子非常简单,但想象一下各种可能性,例如检测何时将 USB 密钥插入 PC,并通过 Silverlight 5 应用程序将文件复制到该 USB 密钥上。 非常酷的东西!
如果您想要此应用程序和其他 Silverlight 5 演示的源代码,请务必查看 Michael 的“#Silverlight 5 的 Mega Collection”演示。
资源
我撰写的其他 Silverlight 5 资源列在下面