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 回答