首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zxing.Net ReadQRCode

Zxing.Net ReadQRCode
EN

Stack Overflow用户
提问于 2020-07-31 01:44:43
回答 1查看 778关注 0票数 0

我正在使用Zxing.Net库来生成QR代码。根据每日健康调查的答案,我每天更新每个用户的QRcode。如果它是一个新用户,QRCode将第一次在web服务器上创建。如果文件已经存在,它只会在上面写入。

我已经开始在不同的进程中使用ReadQRCode()子来读取QR代码并显示数据。但是,在这样做之后,我就不能再更新QR代码了,因为它“正在被另一个进程使用”。只有当我使用ReadQRCode()子来将QR读取/解码到网页时,才会发生这种情况。我能够删除这个“文件锁”的唯一方法是重新启动web服务器。

生成QRCode,这不是问题所在:

代码语言:javascript
复制
  Public Sub GenerateCode(name As String)
        Dim intLoc As Integer
        Dim strFileName As String

        intLoc = Strings.InStr(name, "_")
        strFileName = name.Substring(0, intLoc - 1)
        name = name.Trim()
        Dim writer = New BarcodeWriter()
        writer.Format = BarcodeFormat.QR_CODE
        Dim result = writer.Write(name)
        Dim path As String = Server.MapPath("~/qrCodeImages/" & strFileName & ".jpg")
        Dim barcodeBitmap = New Bitmap(result)

        Using memory As New MemoryStream()
            Using fs As New FileStream(path, FileMode.Create, FileAccess.ReadWrite)
                barcodeBitmap.Save(memory, ImageFormat.Jpeg)
                Dim bytes As Byte() = memory.ToArray()
                fs.Write(bytes, 0, bytes.Length)
                fs.Close()
            End Using
            memory.Close()
        End Using

读取qrcode图像

代码语言:javascript
复制
Sub ReadQRCode()
        Dim reader = New BarcodeReader()
        Dim filename As String = Path.Combine(Request.MapPath("~/qrCodeImages/"), strFileName & ".jpg")
        ' Detect and decode the barcode inside the bitmap
        Dim result = reader.Decode(New Bitmap(filename))
        If result IsNot Nothing Then
            qrData.Visible = True
            qrData.Text = "QR Code: " + result.Text
        End If

    End Sub

在QRCode被Sub ReadQRCode读取后试图更新它时出错

EN

回答 1

Stack Overflow用户

发布于 2020-08-14 05:48:23

您必须释放位图实例,这是为解码过程创建的。Bitmap类将文件保存在锁定状态,直到GC将其释放或收集,这是一个常见的问题。尝试下面的代码片段。

代码语言:javascript
复制
Sub ReadQRCode()
    Dim reader = New BarcodeReader()
    Dim filename As String = Path.Combine(Request.MapPath("~/qrCodeImages/"), strFileName & ".jpg")
    ' Detect and decode the barcode inside the bitmap
    Using bitmap As New Bitmap(filename)
        Dim result = reader.Decode(bitmap)
        If result IsNot Nothing Then
            qrData.Visible = True
            qrData.Text = "QR Code: " + result.Text
        End If
    End Using

End Sub

也许您也应该在方法GenerateCode中添加使用块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63184634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档