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

本文关键字:实例 访问 运行 另一个 | 更新日期: 2023-09-27 18:23:54

我的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!");  
    }

在我的Add项目中,我有一个函数想要远程调用StopMovie()函数。所以我声明如下:

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

代码运行时没有错误,但只执行MessageBox("视频已停止!"),我的视频仍在运行。但当我按下主屏幕上的停止按钮时,它确实会停止视频。我是不是错过了什么?

谢谢。

更新:已解决

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

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

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

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

正如它所建议的,这一行将创建一个新的Main对象(可能是您的表单)。因此,您实际上是在创建一个新表单,并尝试停止表单中的视频。这显然不会影响正在显示的现有表单以及视频播放的位置。

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

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