C#BackgroundWorker意外退出

时间:2016-01-12 10:37:47

标签: c# session citrix

我的应用程序中有后台工作人员,如果还没有用户可以自动启动用户会话。

这是在初始化时在backgroundworker(backgroundInit)上完成的。正如您在下面看到的那样,只要var while保持为假,我就会继续运行checker循环:

var checker = false;
var i = 0;
while (checker == false)
{
   _session = funcs.GetSession(_servers, _name);
   _sessID = _session[0].Trim();
   _servName = _session[1];

   checker = funcs.CheckRunning("lync.exe");
   i++;

   if (i > 200)
   {
      break;
   }
}

CheckRunning方法只是检查指定的程序(在这种情况下," lync")当前是否正在运行并相应地返回truefalse(这是通过一个CMD命令)。

当我在一个空会话中运行应用程序时,while循环仅在爆发前迭代一次,即使" Lync"肯定没有运行。

有没有理由为什么在后台工作程序中运行进程或太多进程可能导致它退出?

1 个答案:

答案 0 :(得分:0)

正如所提到的评论,这不是BackgroundWorker的问题,而是会话尚未开始的_sessID = session[0].Trim();发生的异常,因此没有ID。

要解决此问题,我只是在此作业周围放置一个Try/Catch块,让程序默默地忽略该异常:

    try
    {
        _sessID = _session[0].Trim();
        _servName = _session[1];
    }
    catch (Exception exp)
    {
        // MessageBox.Show(exp.Message);
    }

这适用于我,因为循环将继续检查,直到计数器i达到200限制,程序将在该阶段接受失败。