在VB.NET中加密文本时表单挂起

时间:2013-06-15 14:08:18

标签: vb.net

我在vb.net中有一个函数,用一些密码加密文本:

Public Class PROT
Shared Function EncryptWithPassword(Target As String, Password As String) As String

'Target is the given text
'Password is the password

Dim datas as string =""

'store the encrypted text and with password in datas and return it

Return datas
End Function
End Class

我在我的表格中使用这个函数:

Private Sub encryptbtn_Click(sender As Object, e As EventArgs) Handles encryptbtn.Click
   Dim texttoencrypt As String = TextBox1.Text
    Dim passwordtotext As String = passwordbox.Text
    Dim enc As String = PROT.EncryptWithPassword(texttoencrypt, passwordtotext)
    IO.File.WriteAllText("C:\Users\Ubaada\Documents\SAFE.txt", enc)
End Sub

当Textbox1中的文本长度小于5000时,代码会将表单挂起仅2秒钟。但是,当我尝试使用100000的长度时,它会挂起表格并且不再响应。它不应该在40秒内响应(因为100000比5000大20倍)。


我的问题是,如何操作代码,以便它不会挂起表单并使用长度为100000或更大的字符串。我听说过线程,但我想我不能这样用它:

Dim enc as string=Thread.Start(PROT.EncryptWithPassword(texttoencrypt, passwordtotext))

1 个答案:

答案 0 :(得分:2)

您正在与UI相同的线程中执行代码,因此当任务需要一些时间时它将挂起。你可以通过使用线程来解决这个问题。

在这种情况下,我会使用BackgroundWorker。设置起来非常简单。您不必过于担心如何设置线程。您只需要实现DoWork,如果需要,可以实现RunWorkerCompleted个事件。

您可以为Result事件的EventArgs的{​​{1}}属性分配值。您应该能够在DoWorkRunWorkerCompleted媒体资源的EventArgs事件中访问此值。

documentation中所述:

  

如果您的操作产生结果,您可以将结果分配给DoWorkEventArgs.Result属性。这将在RunWorkerCompleted属性中的RunWorkerCompletedEventArgs.Result事件处理程序中可用。