我正在使用Zxing.Net库来生成QR代码。根据每日健康调查的答案,我每天更新每个用户的QRcode。如果它是一个新用户,QRCode将第一次在web服务器上创建。如果文件已经存在,它只会在上面写入。
我已经开始在不同的进程中使用ReadQRCode()子来读取QR代码并显示数据。但是,在这样做之后,我就不能再更新QR代码了,因为它“正在被另一个进程使用”。只有当我使用ReadQRCode()子来将QR读取/解码到网页时,才会发生这种情况。我能够删除这个“文件锁”的唯一方法是重新启动web服务器。
生成QRCode,这不是问题所在:
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图像
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发布于 2020-08-14 05:48:23
您必须释放位图实例,这是为解码过程创建的。Bitmap类将文件保存在锁定状态,直到GC将其释放或收集,这是一个常见的问题。尝试下面的代码片段。
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中添加使用块。
https://stackoverflow.com/questions/63184634
复制相似问题