小编met*_*cam的帖子

是否可以在没有FullName的情况下从GAC加载程序集?

我知道如何从文件名加载程序集,也从GAC加载程序集.由于我的.msi文件会将一个dll项目放入GAC,我想知道是否有可能从GAC加载它而不知道FullName(我的意思是只是使用程序集名称,甚至是dll文件名),因为我必须从另一个项目加载此程序集.

c# load assemblies gac

17
推荐指数
1
解决办法
5897
查看次数

WPF LifeCyle加载项

我创建了一个加载项,通过反射调用WPF类库.由于这是一个类库,我不得不手动实例化new System.Windows.Application().

然后,类构造函数(通过反射调用的那个)创建一个窗口,并使用Show()(使用Dispatcher.Run()来避免窗口立即关闭)或ShowDialog().

由于我的应用程序是一个加载项,Application仍然存在.因此,我只能将这种情况实例化一次.

在第一次启动时(Application is instanciated),Application.Current.Dispatcher正在运行.

但在第二次发布时,我确定Application.Current.Dispatcher已停止.我从不调用InvokeShutdown()所以我不明白Dispatcher何时停止.

当我第二次启动时,应用程序已经实现(这是正常的)但Dispatcher已停止.

任何的想法 ?谢谢 !

编辑:在我的加载项中,我尝试了两种方法:

第一种方式:

        foreach (Type type in ass2_l.GetTypes())
        {
            if (type.Name == "Loader")
            {
                object obj_l = Activator.CreateInstance(type);
                BindingFlags bf_l = BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
                object[] argList_l = new object[1];
                argList_l[0] = "ok";
                type.InvokeMember("Load", bf_l, null, obj_l, argList_l);
            }
        }
Run Code Online (Sandbox Code Playgroud)

当我从加载项直接调用dll时,Application.Current.Dispatcher处于后台状态,名称为"VSTA_Main".当我第二次启动时,Dispatcher仍然处于后台状态.

第二种方式:

        t_m = new Thread(loadDll);
        t_m.SetApartmentState(ApartmentState.STA);
        t_m.Start();
Run Code Online (Sandbox Code Playgroud)

loadDll实际上包含"第一路"代码的相同代码.当我第一次启动这个部件时,Dispatcher正在运行,一切都很正常.第二次启动时,Dispatcher停止.

编辑2: 问题在于第二种方式.当loadDll完成然后我再次单击我的加载项按钮时,t_m停止并创建另一个不能解决问题,因为Dispatcher ManagedThreadId具有旧的t_m ManagerThreadId:/

编辑3: 问题肯定不是由加载项引起的.如果您只是创建一个程序,每次单击按钮时启动一个线程.该线程尝试实现DLL WPF类库(通过反射),如果您再次单击此按钮(调用另一个线程),因为Dispatcher仍然"链接"到旧线程,Dispatcher将"停止" (像旧线程一样)

wpf state vsto class-library dispatcher

3
推荐指数
1
解决办法
985
查看次数

如何创建动态lambda来使用它?

我学会了用Expression类操作动态lambda表达式.但是,ForEach方法(LINQ)中使用的lambda表达式似乎有点不同,因为它是一个赋值.

例如,这样做:

myList.ForEach(x => x.Status = "OK") ;
Run Code Online (Sandbox Code Playgroud)

将更新myList列表中每个对象的Status属性.

如何使用Expression对象完成它?我没有在Expression中找到任何设置属性的方法......它仅用于检索属性值吗?

c# linq foreach lambda expression

2
推荐指数
1
解决办法
192
查看次数

标签 统计

c# ×2

assemblies ×1

class-library ×1

dispatcher ×1

expression ×1

foreach ×1

gac ×1

lambda ×1

linq ×1

load ×1

state ×1

vsto ×1

wpf ×1