xml地图|网站地图|网站标签 [设为首页] [加入收藏]
枚举描述获取,必须先将当前线程设置为单个线
分类:编程

  关于这类问题网上搜索会有很多解决方案,但基本的意思都相差不大,大致问题出于启用线程时调用类似剪贴板Clipboard.SetDataObject出错,我把我的测试代码展现下:

电视精灵

 public static class EnumExtension
    {
        public static string GetDescription(this Enum value)
        {
            FieldInfo field = value.GetType().GetField(value.ToString());
            DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;

图片 1

效果展示

            return attribute == null ? value.ToString() : attribute.Description;
        }

  解决方案:只需将thread.SetApartmentState(ApartmentState.STA);反注释就可以了。

该项目主要练习xml文件解析和面向对象思维;

        //public static IEnumerable<EnumItem> GetDictionary<TEnum>(this TEnum tEnum)
        //    where TEnum : struct
        //{
        //    return Enum.GetValues(typeof(TEnum)).OfType<Enum>()
        //        .Select(x => new EnumItem
        //        {
        //            Key = Convert.ToInt32(x),
        //            Value = x.ToString(),
        //            Description = x.GetDescription()
        //        });
        //}

  出现的原因:

1.电视台和节目信息都要从xml文件中解析,并绑定;

        public static IEnumerable<EnumItem> GetDictionary(Type tEnum)
        {
            return Enum.GetValues(tEnum).OfType<Enum>()
                .Select(x => new EnumItem
                {
                    Key = Convert.ToInt32(x),
                    Value = x.ToString(),
                    Description = x.GetDescription()
                });
        }
    }

*  单元是进程内部具有相同线程访问要求的对象的逻辑容器。同一单元中的所有对象都可以接收从该单元中的任何线程发出的调用。
.NET Framework 不使用单元,托管对象自己负责以线程安全的方式使用所有共享资源。由于 COM 类使用单元,因此公共语言运行
库需要在 COM interop 的情况下调用 COM 对象时创建并初始化一个单元。托管线程可以创建并进入只允许有一个线程的单线程单
元 (STA) 或者包含一个或多个线程的多线程单元 (MTA)。通过将线程的 ApartmentState 属性设置为 ApartmentState 枚举值之一
,可以控制所创建的单元的类型。由于给定线程只能初始化 COM 单元一次,因此在第一次调用非托管代码之后就不能更改单元类型。*

2.实现点击电视频道节点显示该频道的电视节目信息;

注:在网络上找了两篇文章或许更能说明这个问题。文章的大意是,由于很多COM在.NET环境下如果使用多线程的话,会导致引用的COM不能正常运行,
而如果不声明程序为STAThread的话,.NET就会自动使用多线程来提高效率,这样就会导致不可预知的后果。

3.当时间到达用户设置的节目提醒时间后弹出窗口提醒用户节目即将开始;

  A young ilder ~ an old beggar !

效果演示

1.点击频道显示该频道的节目信息

图片 2

 2.选中全部电视台下的节点,右键显示右键菜单‘添加到我的电视台’;

图片 3

 3.选中我的电视台下的节点,右键显示右键菜单‘删除’;

 图片 4

 4:右键电视节目信息显示设置提醒

图片 5

本文由澳门新葡亰手机版发布于编程,转载请注明出处:枚举描述获取,必须先将当前线程设置为单个线

上一篇:插入图片,我的开发框架之ORM框架 下一篇:并做为参数字传送入泛型方法中动用,将结构体
猜你喜欢
热门排行
精彩图文