做聊天室时,用一个类来缓存最新一的条消息
public class chatMessage
{
    public chatMessage()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }
    public static int xid;//id
    public static string usip;//发消息者IP
    public static string tfrom;//发消息者
    public static string tto;//收消息者
    public static string content;//消息内容
    public static string indate;//发消息时间
}
当最新一条消息发布时,就更新此类的所有静态属性[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]
public string settalk(string content) 
    {
        chatMessage.xid = chatMessage.xid + 1;
        chatMessage.tfrom = Convert.ToString(Session["usid"]);
        chatMessage.tto = Convert.ToString(System.Web.HttpContext.Current.Request.QueryString["tkto"]);
        chatMessage.content = content;
        chatMessage.indate = DateTime.Now.ToString();
        chatMessage.usip = System.Web.HttpContext.Current.Request.UserHostAddress;
        return "ok";
    }可是当两个用户同时点击发布消息的按钮时,会有一条消息被刷掉.请问大家该怎么办?
读消息代码如下:[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]
 public string getCon()
    {
        if (chatMessage.xid > Convert.ToInt32(Session["oldid"]) && chatMessage.tto == Convert.ToString(Session["usid"]))
        {
            Session["oldid"] = chatMessage.xid;
            return chatMessage.tfrom + "在" + chatMessage.indate + "时,对您说:<br/>" + chatMessage.content+"<br/>";
        }
        else 
        {
            return "no";
        }
    }

解决方案 »

  1.   

    chatMessage.content = chatMessage.content+"\r\n"+content;
      

  2.   

    多线程问题请用锁static  object  asyncLock="";
    //某个函数
    lock(asyncLock)
    {
     //中间的代码同一时间只能被一个人执行}
      

  3.   

    多线程问题请用锁 static  object  asyncLock=""; 
    //某个函数 
    lock(asyncLock) 

     //中间的代码同一时间只能被一个人执行 }
    -----------------
    可否讲明白一点??
      

  4.   

    lock 就是锁定执行完后再释放和MONITOR一样