本帖最后由 snailrain 于 2010-05-01 23:27:08 编辑

解决方案 »

  1.   

    猜测报null错误是因为你移除了上次的result。
    而this对象还是上次的指针引用地址。检查之~~
      

  2.   

    vip__888
    我最初考虑过指针引用的问题。
    我专门将 原先代码:        public void ChangeAsyncResult(string userId, AsyncResult result)
            {
                UserEntity user = UserList.Single(temp => temp.UserId == userId);
                user.Result = result;
            }改为:        public void ChangeAsyncResult(string userId,AsyncResult result)
            {
                UserList.Remove(UserList.Single(temp => temp.UserId == userId));
                UserEntity user = new UserEntity();
                user.UserId = userId;
                user.Result = result;
                AddUser(user);
            }这个就不该有指针引用的问题了吧?
      

  3.   


            public void AddUser(UserEntity user)
            {
                lock (_userLock)
                {
                    UserList.Add(user);
                }
            }
      

  4.   

    vip__888
    你是说的AsyncCallback委托吧?
    这个是IHttpAsyncHandler接口的public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)方法的参数。没法改成同步。
      

  5.   

    你这种方法在silverlight中可行,但是在web中要反复回发监听异步结果
      

  6.   

    mngzilin
    我这是长连接。不是轮询。
      

  7.   

    到这看看真正的webIm 不是由客户端通过ajax轮训来调用的。
    而是通过客户端监听,服务端推送的。
    ===============================================
    以上言论来自博客园。
      

  8.   

    vip__888
    这些东西我都明白。我正是借鉴"一步一步打造WebIM(1)"这个博文做的。
      

  9.   

    有项目管理经验的.NET开发的朋友,可以加上限500人的QQ群28720769,一起交流。