C# BackgroundWorker如何处理端口

C# BackgroundWorker如何处理端口,c#,wpf,backgroundworker,C#,Wpf,Backgroundworker,我想问一下后台工作人员到底是如何工作的。我有两项任务: 创建收据并使用财务打印机打印 将收据保存到数据库中 出于某种原因,它似乎有时不起作用,BackgroundWorker也没有完成(或者无法关闭财政priter端口) 代码: 在printrcept.print中,有一种方法可以打开端口、打印收据并关闭端口。正如我所说的,出于某种原因,有时(可能是因为程序太长了?)它无法完成这些任务。最终端口进入“睡眠”状态(或类似状态),我需要重新启动应用程序 最好的方法是什么?也许我应该使用两个Bac

我想问一下后台工作人员到底是如何工作的。我有两项任务:

  • 创建收据并使用财务打印机打印
  • 将收据保存到数据库中
出于某种原因,它似乎有时不起作用,BackgroundWorker也没有完成(或者无法关闭财政priter端口)

代码:

在printrcept.print中,有一种方法可以打开端口、打印收据并关闭端口。正如我所说的,出于某种原因,有时(可能是因为程序太长了?)它无法完成这些任务。最终端口进入“睡眠”状态(或类似状态),我需要重新启动应用程序

最好的方法是什么?也许我应该使用两个BackgroundWorker(第一个用于打印,第二个用于保存到数据库-但是如何捕获布尔结果值呢?)


谢谢你的帮助

@maxmomersteeg可能会使用输入错误-
。请不要关闭端口。SerialPort.Close()的MSDN文章特别警告了这一点。如果DataReceived事件处理程序使用Invoke(),也很容易触发死锁。您的代码片段非常不充分。请格式化您的问题,删除打字错误并格式化代码,使其看起来“有吸引力”。@user13657我们告诉您代码很重要。如果您不愿意提供足够的信息来诊断问题,那么我们无法帮助您。您的问题似乎在打印方法上。如果您不提供代码,我们无法帮助您,对不起。
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);
        (...)
    }
}