Переменная члена управления веб-пользователем недоступна, если она не объявлена ​​как статическая

Я создаю пользовательский веб-элемент управления, используя C# для воспроизведения некоторых 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 создается на сервере для использования всеми клиентами?

1 ответ

Решение

Я подозреваю, что проблема не в том, что к нему вообще нельзя получить доступ. Я сильно подозреваю, что проблема в том, что у вас есть два разных запроса, и, следовательно, два разных случая WaveFilePlayer - так, когда вы выполняете ButtonPlay_Click, files переменная будет нулевой, если вы не написали код для сохранения его между запросами.

Здесь можно указать состояние просмотра или сеанс на стороне сервера. Вы не должны использовать статическую переменную, поскольку это в основном означает, что у вас есть одна переменная, общая для всех запросов (для всех пользователей).

Другие вопросы по тегам