0

私の C# ビジュアル スタジオ ソリューションには、Main と Add の 2 つのプロジェクトがあります。どちらも異なる名前空間を使用するプロジェクトです。言ってみましょう: MainNameSpace と AddNameSpace。

メイン プロジェクトには、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 (「Video Stoped!」) を実行するだけで、ビデオは引き続き実行されます。しかし、メインの停止ボタンを押すと、ビデオが停止します。ここで何かが恋しいですか?

ありがとう。

更新:解決済み

フォームからアクセスしました(すでに実行されています):

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

2 に答える 2

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

この行は、示唆されているように、新しい Mainオブジェクト (おそらくフォーム) を作成します。したがって、基本的に新しいフォームを作成し、そのフォーム内でビデオを停止しようとします。これは明らかに、どこかに表示されている既存のフォームやビデオが再生されている場所には影響しません。

Mainこれを機能させるには、何らかの方法で既存の参照をAddコンポーネントに渡す必要があります。

于 2013-07-19T18:17:27.847 に答える
0

Add プロジェクトのクラスに MainNameSpace.Main インスタンスを渡す必要があります。

于 2013-07-19T18:17:58.173 に答える