【问题标题】:Exception has been thrown by the target of an invocation. In C# [duplicate]调用的目标已引发异常。在 C# [重复]
【发布时间】:2014-12-25 07:09:20
【问题描述】:

我正在将项目 A 中的所有“表单名称”按照

C# Get form names of project A from Project B

我正在使用 @jerry 的回答。

当我的代码到达var f = (Form)emptyCtor.Invoke(new object[] { }); 行时,我收到异常已被调用错误的目标抛出。

下面是完整代码

try
{
    Assembly projectA = Assembly.Load("ProjectA"); // replace with actual ProjectA name 
    // despite all Microsoft's dire warnings about loading from a simple name,
    // you should be fine here as long as you don't have multiple versions of ProjectA
    // floating around

    foreach (Type t in projectA.GetTypes())
    {
        if (t.BaseType == typeof(Form))
        {
            var emptyCtor = t.GetConstructor(Type.EmptyTypes);
            if (emptyCtor != null)
            {
                var f = (Form)emptyCtor.Invoke(new object[] { });
                // t.FullName will help distinguish the unwanted entries and
                // possibly later ignore them
                string formItem = t.FullName + " // " + f.Text + " // " + f.Name;
                checkedListBox1.Items.Add(formItem);
            }
        }
    }
}
catch(Exception err)
{
    // log exception
}

我被搜索错误原因但失败了。请建议我,我们已经穿了g

编辑:

以下是错误详情

图片 1

图片 2

【问题讨论】:

  • 您是否收到InnerException 错误?
  • InnerException 中有 StackTrace - 通过检查您可以更好地了解问题所在
  • @J0HN InnerException 堆栈跟踪表明异常是由FrmMachineryType 构造函数引发的。看来您还具有此程序集的调试信息(.pdb files),并且堆栈跟踪应包含引发异常的行号。如果您有权访问源代码,则可以检查导致错误的原因。可能表单构造函数试图访问一些未创建的静态对象。

标签: c# winforms


【解决方案1】:

试试这个:

var f = (Form)emptyCtor.Invoke(null);

顺便说一句,你想达到什么目的?

【讨论】:

    【解决方案2】:
    private void childclick(object sender, EventArgs e)
    {
        DataTable dtTrans = new DataTable();
        dtTrans = Db.bindData("SELECT frm_Code FROM tbl_MST_SubMnu WHERE frm_Name='" + sender.ToString() + "'");
    
        Assembly frmAssembly = Assembly.LoadFile(Application.ExecutablePath);
        foreach (Type type in frmAssembly.GetTypes())
        {
            if (type.BaseType == typeof(Form))
            {
                if (type.Name == dtTrans.Rows[0][0].ToString())
                {
                    Form frmshow = (Form)frmAssembly.CreateInstance(type.ToString());
    
                    frmshow.Show();
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-22
      • 2018-11-08
      • 2018-02-14
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多