vb.net如何用它声明线程和调用函数

时间:2017-09-15 03:51:31

标签: vb.net multithreading

我正在尝试使用一个线程来翻译Windows窗体中的每个文本,以使我的系统成为多语言。

我有一个名为'Language'的单独的类,带有sub和function,sub读取语言源文件,函数通过接收和返回字符串进行转换。

然后我有我的第一个Windows表单,我声明了我的主题:

    Dim ThreadTraductor As New Thread(AddressOf ...) 'don't know how to do it

    Dim cultureInfo As New System.Globalization.CultureInfo(ConfigurationManager.AppSettings('en').ToString)

    ThreadTraductor.CurrentCulture = cultureInfo
    ThreadTraductor.CurrentUICulture = cultureInfo

基本上我正在创建这个线程,让后台进程翻译在执行期间打开的每个Windows窗体,问题是我不知道如何正确声明它,因为我不想在声明时包含任何参数,但是我希望从不同的Form中调用线程并使用参数进行翻译,并且我希望线程在Language类中使用我的translate方法,这可能吗?怎么样? 请协助,我之前没有使用过线程。

1 个答案:

答案 0 :(得分:0)

Public Class Lenguaje'用于读取语言源文件和翻译字符串的类

Public dicIdioma As New Dictionary(Of String, String)

Public Sub LeerArchivo(ByVal Culture As String)

    Dim vectorAux() As String
    dicIdioma.Clear()

    Try
        Dim LectorArchivo As New StreamReader("C:\Users\Joaqo\Desktop\Dorian VB\DorianBdBv1.0\UI\bin\Debug\" + Culture + ".txt")

        Dim line As String

        While Not LectorArchivo.Peek = -1
            line = LectorArchivo.ReadLine()
            vectorAux = line.Split(":")
            dicIdioma.Add(vectorAux(0), vectorAux(1))
        End While

    Catch ex As System.IO.FileNotFoundException
        MessageBox.Show("No se encuentra el archivo de idioma.")
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub

Public Function Traducir(ByRef frase As String) As String

    Dim StringAux As String

    For Each Item As String In dicIdioma.Keys

        If Item = Char.ToLower(frase(0)) & frase.Substring(1) Then
            StringAux = Char.ToUpper(dicIdioma.Item(Item)(0)) & dicIdioma.Item(Item).Substring(1)
            frase = StringAux.Replace("_", " ")

        ElseIf Item.Replace("_", " ") = Char.ToLower(frase(0)) & frase.Substring(1) Then
            StringAux = Char.ToUpper(dicIdioma.Item(Item)(0)) & dicIdioma.Item(Item).Substring(1)
            frase = StringAux.Replace("_", " ")

        End If
    Next

    Return frase

End Function

结束班

然后我迭代我的Windows窗体中的每个文本对象来翻译它们:

    For Each Item As Label In Me.Controls.OfType(Of Label)()
        Item.Text = Traductor.Traducir(Item.Text)
    Next

    For Each Item As Button In Me.Controls.OfType(Of Button)()
        Item.Text = Traductor.Traducir(Item.Text)
    Next

它工作得很好,但是我会调用Traductor,在我的第一个界面上声明的Lenguaje实例,从整个应用程序来看,是不是错了?

我被告知我应该使用Culture和CultureUI,但我对此并不熟悉。你怎么看?对不起,如果我错过了什么,这是我的第一个问题。