如何强制模块初始化(VB Windows应用商店应用)?

时间:2014-01-23 23:43:39

标签: vb.net windows-8 module theory

(Windows应用商店应用,使用VB / XAML)

我目前正在通过App.Current从App.Xaml.vb播放我的游戏中的声音效果(从其他页面播放声音),并且效果很好。但是,为了使我的代码更整洁,我有想法将我的所有声音效果移动到一个模块中,仍然可以从应用程序的任何位置访问它们。

似乎模块只在第一次需要时加载到内存中(这是正确的)吗?这意味着我第一次尝试播放声音效果时它是静音的(因为模块没有时间加载它需要的东西)。

我可以在应用启动时强制模块进入内存,以便我的所有应用页面都可以访问它吗?当我的应用程序启动时,我目前正在加载所有声音(只有大约六个),但是在分立模块中进行此操作会“整洁”。

我尝试添加'Imports MyNamespace.AudioModule',但这不会使模块在第一次访问/使用之前加载。

我可以使用它来处理一个丑陋,不必要的黑客攻击:如果我在应用程序首次启动时播放声音(来自模块),模块初始化(所有声音都在构造函数中加载)和声音在那之后工作(这第一个声音是静音的,因为模块还没有加载)。

我在这里缺少一个明显的,根本的答案吗?

1 个答案:

答案 0 :(得分:3)

对于VB Module或C#Static类,运行构造函数并在第一次调用方法或函数时填充值。强制执行此操作的一种方法是调用虚拟方法。

Microsoft Exchange 2013中的示例101代码示例:

// C#
CertificateCallback.Initialize(); // Instantiate static class

public static class CertificateCallback {
    static CertificateCallback() { // Static constructor
        ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;
    }

public static void Initialize() { // Dummy method to force initialization
}
...
}

'VB.NET
CertificateCallback.Initialize() // Instantiate static class

Public Module CertificateCallback
    Sub New() ' Static constructor
        ServicePointManager.ServerCertificateValidationCallback = AddressOf CertificateValidationCallBack
    End Sub

Public Sub Initialize() // Dummy method to force initialization
End Sub
...
End Module