65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 Silverlight 5 中使用 PInvoke

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (5投票s)

2011年 9月 12日

CPOL

3分钟阅读

viewsIcon

46069

downloadIcon

707

了解如何在 Silverlight 5 RC 中开始使用 P/Invoke。

Description: image

引言

您可能已经注意到 Silverlight 5 (候选发布版) 已经发布。 RC 中包含的新功能之一是调用 P/Invoke 的能力。 在这个简短的演示中,我们将编写一个使用该功能的 Silverlight 5 应用程序。

所需工具

入门

继续并打开 Visual Studio 2010 SP1,然后选择文件->新建项目,然后选择 Silverlight 应用程序。

Description: SNAGHTML425f655

默认情况下,我们有一个名为“Silverlight 5”的新选项被选为 Silverlight 版本。 让我们继续保持不变。 您还可以从此下拉列表中选择 Silverlight 3 或 4。

Description: SNAGHTML427e8ce

让我们继续右键单击我们的项目并选择“属性”。

Description: image

选中“启用在浏览器外运行应用程序”。

Description: image

现在继续选中“在浏览器外运行时需要提升的信任”。

Description: SNAGHTML2b29bb45

切换回 *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 代码。

让我们继续向项目中添加一个新类。

Description: image

让我们将其命名为 *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();
        }
    }
}

现在,当用户启动此项目时,应用程序将脱离浏览器,并且计算机每次都会以不同的频率发出多次哔哔声。

您还可以通过返回“属性”页面并选择“在浏览器中运行时需要提升的信任”在浏览器中获得相同的功能。

Description: image

唯一需要注意的是,* .aspx* 页面不再设置为 Web 项目中的默认页面,因此您需要在 * .aspx* 页面上执行“在浏览器中查看”以进行测试。

Description: image

结论

如您所见,在 Silverlight 5 应用程序中使用 P/Invoke 非常容易。 这个例子非常简单,但想象一下各种可能性,例如检测何时将 USB 密钥插入 PC,并通过 Silverlight 5 应用程序将文件复制到该 USB 密钥上。 非常酷的东西!

如果您想要此应用程序和其他 Silverlight 5 演示的源代码,请务必查看 Michael 的“#Silverlight 5 的 Mega Collection”演示

资源

我撰写的其他 Silverlight 5 资源列在下面

© . All rights reserved.