(Windows应用商店应用,使用VB / XAML)
我目前正在通过App.Current从App.Xaml.vb播放我的游戏中的声音效果(从其他页面播放声音),并且效果很好。但是,为了使我的代码更整洁,我有想法将我的所有声音效果移动到一个模块中,仍然可以从应用程序的任何位置访问它们。
似乎模块只在第一次需要时加载到内存中(这是正确的)吗?这意味着我第一次尝试播放声音效果时它是静音的(因为模块没有时间加载它需要的东西)。
我可以在应用启动时强制模块进入内存,以便我的所有应用页面都可以访问它吗?当我的应用程序启动时,我目前正在加载所有声音(只有大约六个),但是在分立模块中进行此操作会“整洁”。
我尝试添加'Imports MyNamespace.AudioModule',但这不会使模块在第一次访问/使用之前加载。
我可以使用它来处理一个丑陋,不必要的黑客攻击:如果我在应用程序首次启动时播放声音(来自模块),模块初始化(所有声音都在构造函数中加载)和声音在那之后工作(这第一个声音是静音的,因为模块还没有加载)。
我在这里缺少一个明显的,根本的答案吗?
答案 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