using System.Runtime.Remoting.Messaging;
using System.Web;
using System;namespace com.XXX.framework {
    public sealed class AppUtil {
        #region Thread-safe, lazy Singleton        public static AppUtil Instance {
            get {
                return Nested.AppUtil;
            }
        }        private AppUtil() {
            
        }
        private class Nested {
            static Nested() { }
            internal static readonly AppUtil AppUtil =
                new AppUtil();
        }        #endregion
        public UserDto GetUserDto() {
            UserDto userDto = ContextUserDto;
            if (userDto == null) {
                throw new Exception("请在LonForm设置用户信息");
            }
            return userDto;
        }        /// <summary>
        /// 保证session的线程安全性
        /// 如果是web应用,使用 <see cref="HttpContext" />
        /// 如果是windows应用使用 <see cref="CallContext" />. 
        /// </summary>
        public UserDto ContextUserDto {
            get {
                if (IsInWebContext()) {
                    return (UserDto)HttpContext.Current.Items[UserDto_KEY];
                } else {
                    return (UserDto)CallContext.GetData(UserDto_KEY);
                }
            }
            set {
                if (IsInWebContext()) {
                    HttpContext.Current.Items[UserDto_KEY] = value;
                } else {
                    CallContext.SetData(UserDto_KEY, value);
                }
            }
        }
        /// <summary>
        /// 判断是不是 web应用
        /// </summary>
        /// <returns></returns>
        private bool IsInWebContext() {
            return HttpContext.Current != null;
        }        private const string UserDto_KEY = "CONTEXT_UserDto";
        
    }
}

解决方案 »

  1.   

    我自己试了下,可以在多个Form中得到同一个UserDto,刚接触C#不久,大家帮下忙哦。
      

  2.   

    你那个是用session全局变量的话,是可以在每个页面得到,
    但是要小心页面更新的时候,Page_load那里不要轻易赋值,如果赋值徭跟踪是否每次加载页面都是你需要的全局变量。
      

  3.   

    用到session应该小心点了,2楼比较正确