C#,非静态字段的对象引用

C#,非静态字段的对象引用,c#,C#,我有一个COM服务器应用程序,它控制另一个应用程序CANoe。我想在COM应用程序的Form2上显示一个进度条。进度条的值应在EventHandler中更新。eventHandler调用form2的方法,该方法将更新进度条的值。EventHandler是主窗体 private void mCANoeProgProgressChangedInternal(string sysvarName, object Value) // in main Form { if (mCANoeMeasure

我有一个COM服务器应用程序,它控制另一个应用程序CANoe。我想在COM应用程序的Form2上显示一个进度条。进度条的值应在EventHandler中更新。eventHandler调用form2的方法,该方法将更新进度条的值。EventHandler是主窗体

private void mCANoeProgProgressChangedInternal(string sysvarName, object Value) // in main Form
{
    if (mCANoeMeasurement != null && mCANoeMeasurement.Running)
    {
        ProgressBarForm.Prog_progress(Value);
    }
}
并以表格2—

public void Prog_progress(object value)
{
    progressBarProg.Value = (int)value;
}
它显示了一个错误

非静态字段、方法或对象所需的对象引用 属性“Form2.Prog_progress(object)”“ at-ProgressBarForm.Prog_进度(值);以主要形式

private void mCANoeProgProgressChangedInternal(string sysvarName, object Value) // in main Form
{
    if (mCANoeMeasurement != null && mCANoeMeasurement.Running)
    {
        ProgressBarForm.Prog_progress(Value);
    }
}

请提供您的意见

在表单1中,您需要在表单2的实例上执行
Prog\u progress
方法,而不是在类上(以静态方式)

在表格1中:

private ProgressBarForm _progressForm = new ProgressBarForm();
(...)
private void mCANoeProgProgressChangedInternal(string sysvarName, object Value) // in main Form
{
     if (mCANoeMeasurement != null && mCANoeMeasurement.Running)
     {
         _progressForm.Prog_progress(Value);
     }
}

可能您没有实例化Form2

//这是给你父母的表格1

public partial class Form1 : Form
{ 
    private void mCANoeProgProgressChangedInternal(object sender, EventArgs e)
    {
        ProgressBarForm frm = new ProgressBarForm(); 
        frm.DoSomething(value);
    }
}

欢迎来到StackoverFlow。请阅读并了解。欢迎来到stack overflow!在这里发布问题之前,我们鼓励您进行彻底的研究。首先,错误信息非常清楚。如果在那之后还有其他问题,我相信使用您选择的搜索引擎进行简单搜索会比编写您的问题更快地得到答案。ProgressBarFrom是form2的类名。每次更改某个内容时实例化一个新表单会使您的记忆中充满不必要的内容,重复的对象。同意。最好使用singleton模式以保持选中状态singleton可能太多,父类中的字段或属性就足够了。尽管如此,还是需要一个活物:)谢谢!它解决了这个问题。