我想问一下BackgroundWorker的工作原理。我有两个任务:
出于某种原因,似乎它有时不起作用且BackgroundWorker无法完成(或无法关闭财务提供程序端口)。
代码:
BackgroundWorker bw2 = new BackgroundWorker();
bw2.DoWork += (sender, e) =>
{
bool result = printReceipt.print(parameters);
using(SqlConnection conn = new SqlConnection(myConnString)
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("DECLARE @token uniqueidentifier; " +
"EXEC usp_AsyncExecInvoke @procedureName = N'CreateDocument' " (...)
cmd.Parameters.AddWithValue("printed", result == true ? 1 : 0);
(...)
}
}
在printRceipt.print中有一个方法可以打开端口,打印收据并关闭端口。正如我所说,出于某种原因,有时(也许当程序花了太长时间?)它没有完成这些任务。最终端口进入“睡眠”状态(或类似的东西),我需要重新启动应用程序。
最好的方法是什么?也许我应该使用两个BackgroundWorkers(第一个打印,第二个保存到DB - 但是如何捕获我的布尔结果值呢?)
感谢您的帮助!