现在有两个WPF做的dll 控件 A.dll 和 B.dll在Winform中 有两个按钮btn1 btn2 和一个elementHost1控件。
 
private void btn1_Click(object sender, EventArgs e)
        {
          
            Object obj2;
            Assembly SampleAssembly2;            SampleAssembly2 = Assembly.LoadFrom("A.dll");
            obj2 = SampleAssembly2.CreateInstance("Roye.ZRY_Dll");            elementHost1.Child = (UIElement)obj2;
        }
 private void btn2_Click(object sender, EventArgs e)
        {
          
            Object obj2;
            Assembly SampleAssembly2;            SampleAssembly2 = Assembly.LoadFrom("B.dll");
            obj2 = SampleAssembly2.CreateInstance("Roye.ZRY_Dll");            elementHost1.Child = (UIElement)obj2;
        }
 
为什么elementHost1.Child不会改变呢?请高手留下邮箱,我发测试源码给大家wpfc#反射

解决方案 »

  1.   

    嗯。两个按钮,先单击btn1正常显示A.dll  然后单击btn2没有反应。
    关闭软件后。先单击btn2正常显示B.dll  然后单击btn1没有反应。
      

  2.   

    嗯。两个按钮,先单击btn1正常显示A.dll  然后单击btn2没有反应。
    关闭软件后,重新启动软件。先单击btn2正常显示B.dll  然后单击btn1没有反应。
      

  3.   

    两个dll中继承UserControl的类名称(包括命名空间)一样,改下
      

  4.   

    不想改名也可以,先设置为null,然后再设置要更新的对象吧
      

  5.   

    lz干脆elementHost1动态创建吧,没次把窗体上的elementHost1移出,再创建个新的
    this.Controls.Remove(elementHost1);
    elementHost1=new ElementHost1();
    this.Controls.Add(elementHost1);
    elementHost1.Location = new System.Drawing.Point(113, 12);
    elementHost1.Name = "elementHost1";
    elementHost1.Size = new System.Drawing.Size(329, 354);
    ....
      

  6.   

    好像都不行。不知道即使用两个elementHost控件,也不能正常显示。
    但是如果把
    btn1_Click 换成以下代码,倒可以和B.dll互换。(WPF的Label和B.dll切换) System.Windows.Controls.Label lab = new System.Windows.Controls.Label();
                lab.Content = "Button in WPF";
                // Add it to ElementHost
                elementHost1.Child = lab;
      

  7.   

    我测试了,应该是6,7楼说的,你那个dll里的程序集命名空间和类名完全一样,换个名试试
      

  8.   

    ...你两个dll里的程序集命名空间和类名完全一样...
      

  9.   

    抱歉不是同名问题。
    我发现你的两个dll是相同的。
    你的两个dll是一个项目编译出来的吧(只改了一个图片?)然后改了一下编译好的dll的名字?
    如果是,改下AssemblyInfo.cs,重新编译
      

  10.   

    最好用两个项目去分别编译dll