0

サーバーでいくつかの .wav ファイルを再生するために C# を使用して Web ユーザー コントロールを作成しています。以下は私のコードです。

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_Clickstring[] files

System.Web.UI.UserControlasp.net ページでユーザー コントロールを読み込んでいるときに、新しいオブジェクトが作成されないということですか? また、複数のクライアント (ブラウザ) が .wav ファイルを再生しようとすると、サーバーで .wav ファイルのインスタンスが 1 つだけstring[] files作成され、すべてのクライアントで使用されるということですか?

4

1 に答える 1

3

問題は、アクセスできないことではないと思います。問題は、2 つの異なるリクエストがあり、したがって 2 つの異なるインスタンスがあることにあると強く思いますWaveFilePlayer。そのため、 を実行しているとき、リクエスト間で永続化するコードを記述していない限りButtonPlay_Clickfiles変数は null になります。

ここでのオプションは、ビュー ステートまたはサーバー側セッションです。基本的に、すべてのリクエスト間で (すべてのユーザーに対して) 単一の変数を共有していることを意味するため、静的変数を使用しないでください。

于 2012-10-02T06:27:46.803 に答える