从另一个已经运行的实例访问类的实例
本文关键字:实例 访问 运行 另一个 | 更新日期: 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项目中的类。