C# BackgroundWorker 意外退出
C# BackgroundWorker Exiting Unexpectedly
我的应用程序中有以下后台工作人员,目的是在没有可用会话时自动启动用户会话。
这是在初始化时在后台工作程序 (backgroundInit) 上完成的。正如您在下面看到的,我有一个 while
循环,只要 var checker
保持为 false,它就会继续 运行:
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")当前是否 运行ning 和 returns true
或 false
相应地(这是通过CMD命令完成的)。
当我 运行 应用程序处于空会话中时,虽然 "Lync" 绝对不是 运行ning,但 while 循环仅在爆发前迭代一次。
为什么 运行从 Backgroundworker 中启用一个进程或太多进程可能会导致它退出?
如评论所述,这不是 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 限制,在该阶段程序将接受失败。
我的应用程序中有以下后台工作人员,目的是在没有可用会话时自动启动用户会话。
这是在初始化时在后台工作程序 (backgroundInit) 上完成的。正如您在下面看到的,我有一个 while
循环,只要 var checker
保持为 false,它就会继续 运行:
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")当前是否 运行ning 和 returns true
或 false
相应地(这是通过CMD命令完成的)。
当我 运行 应用程序处于空会话中时,虽然 "Lync" 绝对不是 运行ning,但 while 循环仅在爆发前迭代一次。
为什么 运行从 Backgroundworker 中启用一个进程或太多进程可能会导致它退出?
如评论所述,这不是 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 限制,在该阶段程序将接受失败。