1

私は、ストリーミング ソフトウェアである Wirecast に接続し、X 秒ごとにソースを強制的に変更する単純なアプリケーションに取り組んでいます。これは ASP MVC 4 を学ぶ良い方法だと思っていましたが、あまり慣れておらず、いくつかの問題に遭遇しました。ラジオ ボタンを選択して [適用] を押すなどして、ユーザーがループを有効または無効にできるようにしたいと思います。ループの開始は正常に機能しますが、終了できません。私がこれをしようとしている方法は、ループを実行するスレッドを作成し、ユーザーが「ループを有効にする」ラジオボタンを選択するとスレッドを開始し、「ループを無効にする」を選択するとスレッドを中止することです。Abort メソッドが呼び出されていることがわかりますが、スレッドはまだ実行されています。関連するコードは次のとおりです。

public Thread loop = new Thread(new ThreadStart(ThreadLoop));

[HttpPost]
public ActionResult Loop(Models.Loop model)
{

    if (model.doLoop == true)
    {
        loop.Start();
    }
    else
    {
        loop.Abort();
    }

    return View();
}

public static void ThreadLoop()
{
    object oWirecast = GetWirecast();
    object oDocument = Late.Invoke(oWirecast, "DocumentByIndex", 1);
    object oNormalLayer = Late.Invoke(oDocument, "LayerByName", "normal");
    shotCount = (int)Late.Invoke(oNormalLayer, "ShotCount");
    int shot = 0;

    while (true)
    {
        shot = shot + 1;
        if (shot > shotCount)
        {
            shot = shot % shotCount;
        }
        int shot_id = (int)Late.Invoke(oNormalLayer, "ShotIDByIndex", shot);
        Late.Set(oNormalLayer, "ActiveShotID", shot_id);
        Late.Invoke(oNormalLayer, "Go");
        Thread.Sleep(3000);
    }
}

ですから、これに問題がある場合、または正しい方向に私を向けることができる場合は、助けていただければ幸いです. 何らかの方法で私を助けることができる場合は、お知らせください。ありがとうございました!

4

1 に答える 1

2

ASP.NET MVC の DefaultControllerFactory はスレッド セーフではなく、リクエストごとに新しいコントローラー インスタンスが作成されます。

http://msdn.microsoft.com/en-us/library/system.web.mvc.defaultcontrollerfactory.aspxを参照してください

于 2013-11-11T21:14:15.193 に答える