C# 未声明为静态时,无法访问Web用户控件成员变量
我正在使用C#创建一个web用户控件,以便在服务器中播放一些.wav文件。下面是我的代码C# 未声明为静态时,无法访问Web用户控件成员变量,c#,asp.net,static,webusercontrol,member-variables,C#,Asp.net,Static,Webusercontrol,Member Variables,我正在使用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) {
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
声明为一个成员变量。然后我在按钮load\u Click
方法中分配它。但是当我试图在按钮play\u Click
方法中访问它时,它抛出一个NullReferenceException
,除非string[]files
声明为静态
这是否意味着在asp.net页面中加载用户控件时,不会创建
System.Web.UI.UserControl
的新对象?这是否意味着当多个客户端(浏览器)尝试播放.wav文件时,服务器上只会创建一个字符串[]文件的实例供所有客户端使用?我怀疑问题根本不是无法访问它。我强烈怀疑问题在于您有两个不同的请求,因此有两个不同的WaveFilePlayer
实例-因此,当您执行按钮lay\u Click
时,files
变量将为空,除非您编写了一些代码在请求之间保持它
这里的选项是查看状态或某些服务器端会话。您不应该使用静态变量,因为这基本上意味着您在所有请求(针对所有用户)之间共享了一个变量。我怀疑问题根本不是它无法访问。我强烈怀疑问题在于您有两个不同的请求,因此有两个不同的WaveFilePlayer
实例-因此,当您执行按钮lay\u Click
时,files
变量将为空,除非您编写了一些代码在请求之间保持它
这里的选项是查看状态或某些服务器端会话。您不应该使用静态变量,因为这基本上意味着您在所有请求(对于所有用户)之间共享了一个变量。您所说的“不可能访问它”是什么意思?您遇到了什么错误?@JonSkeet它在访问文件
变量时抛出了一个NullReferenceException
。好吧,我怀疑它在您取消引用文件
变量的值时抛出了一个NullReferenceException。只要访问它就可以了,并且会得到一个null
引用,原因在我的答案中。请在以后的问题中更具体一些-“不可能访问”听起来像是编译时错误…@JonSkeet谢谢,我以后会尽量更具体一些..你说的“不可能访问”是什么意思?您遇到了什么错误?@JonSkeet它在访问文件
变量时抛出了一个NullReferenceException
。好吧,我怀疑它在您取消引用文件
变量的值时抛出了一个NullReferenceException。只要访问它就可以了,并且会得到一个null
引用,原因在我的答案中。请在以后的问题中更具体一些-“不可能访问”听起来像是编译时错误…@JonSkeet谢谢,我会尽量在将来更具体一些。@manas:我答案的第二段给出了备选方案。基本上,您必须以某种方式传播数据-通过客户端或服务器。这是编写web应用程序的一个基本部分。很抱歉,对我来说,理解第二部分的第一部分有点困难paragraph@manas:哪一位?视图状态?您是否尝试搜索“asp.net视图状态”?关于它有很多信息。同样,搜索“asp.net会话”也会获得大量的点击率。@manas:我的答案的第二段给出了备选方案。基本上,您必须以某种方式传播数据-通过客户端或服务器。这是编写web应用程序的一个基本部分。很抱歉,对我来说,理解第二部分的第一部分有点困难paragraph@manas:哪一位?视图状态?您是否尝试搜索“asp.net视图状态”?关于它有很多信息。同样,搜索“asp.net会话”也会获得大量的点击率。