从已经运行的另一个实例访问类的实例

时间:2013-07-19 18:12:40

标签: c#

我在C#visual studio解决方案中有两个项目:Main和Add。两个项目都使用不同的名称让我们说:MainNameSpace和AddNameSpace。

在Main项目中,我有一个表单上有一个activex windows媒体播放器组件。我打开了打开视频的对话框,还有一个停止视频的按钮。这是用于停止视频的虚拟按钮。

    public void button2_Click(object sender, EventArgs e)
    {
        StopMovie();
    }

    public void StopMovie() 
    {
        axWindowsMediaPlayer1.Ctlcontrols.stop();
        MessageBox.Show("Video stoped!");  

    }

在我的添加项目中,我有一个想要远程调用StopMovie()函数的函数。所以我宣布这样的事情:

void RemoteStop()
{
     MainNameSpace.Main ff = new MainNameSpace.Main();
     ff.StopMovie();
}

代码运行没有错误,但只执行MessageBox(“Video Stoped!”),我的视频仍在继续运行。但是当我按下主要停止按钮时它会停止视频。 我在这里想念一下吗?

感谢。

更新:已解决

我通过表单(已经运行)访问:

        FormName remotekill = (FormName)Application.OpenForms["FormName"];
        if (remotekill != null)
        {
            remotekill.StopMovie();                
        }

2 个答案:

答案 0 :(得分:4)

MainNameSpace.Main ff = new MainNameSpace.Main();

根据建议,这一行会创建一个 Main对象(可能是您的表单)。因此,您实际上是在创建一个新表单并尝试在 表单中停止视频。这显然不会影响正在某处播放视频的现有表格。

您必须以某种方式将现有Main的引用传递给您的Add组件才能使其正常工作。

答案 1 :(得分:0)

您需要将MainNameSpace.Main实例传递给Add项目中的类。