0

我正在使用 C# 创建一个 Web 用户控件来播放服务器中的一些 .wav 文件。以下是我的代码。

public partial class WaveFilePlayer : System.Web.UI.UserControl
{
    //private string[] files;
    private static string[] files;

    protected void ButtonLoad_Click(object sender, EventArgs e)
    {
        string resourcePath = ConfigurationManager.AppSettings["ResourcePath"];
        string searchPattern = ConfigurationManager.AppSettings["SearchPattern"];

        files = System.IO.Directory.GetFiles(path, searchPattern);
    }

    protected void ButtonPlay_Click(object sender, EventArgs e)
    {
        int selectedIndex = ListBoxFiles.SelectedIndex;

        SoundPlayer soundPlayer = new SoundPlayer(files[selectedIndex]);
        soundPlayer.Play();
    }

如上面的代码所示,我声明string[] files为成员变量。然后我在ButtonLoad_Click方法中分配它。但是NullReferenceException当我尝试在ButtonPlay_Click方法中访问它时它会抛出一个,除非string[] files被声明为静态的。

这是否意味着System.Web.UI.UserControl在 asp.net 页面中加载用户控件时未创建新对象?这是否意味着当多个客户端(浏览器)尝试播放 .wav 文件时,string[] files在服务器上只创建一个实例供所有客户端使用?

4

1 回答 1

3

我怀疑问题不在于它根本无法访问。我强烈怀疑问题在于您有两个不同的请求,因此有两个不同的WaveFilePlayer- 所以当您执行时ButtonPlay_Click,该files变量将为 null ,除非您编写了一些代码来在请求之间保留它。

此处的选项将是视图状态或某些服务器端会话。您不应该使用静态变量,因为这基本上意味着您在所有请求(所有用户)之间共享了一个变量。

于 2012-10-02T06:27:46.803 回答