好的,我有一个小聊天服务器,可以从一个小聊天客户端接收消息。
此客户端有一个“发送”按钮:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox id="ServerDataArea" TextMode="multiline" Columns="50" Rows="15" runat="server" Enabled="false" />
<br />
<asp:TextBox ID="Message" runat="server" ></asp:TextBox>
<asp:Button ID="SendMessage" runat="server" OnClick="SendMessage_Click" Text="Send" />
</ContentTemplate>
</asp:UpdatePanel>
这就是“发送”按钮想做的事情:
public partial class _Default : System.Web.UI.Page
{
private MessageHandlerThread mHandler;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
mHandler = new MessageHandlerThread(ServerDataArea);
}
}
/// <summary>
/// send message
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void SendMessage_Click(object sender, EventArgs e)
{
Debug.WriteLine("send clicked");
if (Message.Text != "")
{
mHandler.StoreMessage(Message.Text);
}
}
}
当我第一次运行网站时,我的小服务器告诉我“客户端连接”并且它的一切都很好但是当我按下“发送”按钮时它会因为以下原因而对我大喊:
Object reference not set to an instance of an object.
意思是mHandler = null,这对我来说是一个大问题,它根本不是我想要的。我想使用第一次加载页面时创建的mHandler。如果我从“Page_Load”中删除“if(!IsPostBack)”,每次按“发送”时它都会建立一个新连接,这也不是我想要的,因为我想使用相同的TcpClient连接来接收数据以及发送它在我的客户端线程中。
答案 0 :(得分:2)
将mHandler保存在会话状态,它将在回发中保持不变(假设代码在一个Web服务器上运行)。