Új hozzászólás Aktív témák

  • Ispy

    nagyúr

    Egyébként a fő szálban lévő controlokat is lehet szerkeszteni, de nem úgy hogy textbox.text, hanem delegate utasítással.

    Jó régi kód, már nem is nagyon emlékszem rá, ezzel tudsz játszani, igaz ez vb, de át lehet fordítani c#-ra.

    Public Class SplashForm

    #Region "DECLARE"
    Implements IDisposable

    Private _ParentForm As Form
    Private t As Threading.Thread = Nothing
    Private f As FP_SplashForm = Nothing
    Private _Sleep As Integer

    Private Delegate Sub SetMessageTextDelegate(MessageText As String)

    #End Region

    #Region "CLASS CONSTRUCTOR"

    Public Sub New(ParentForm As Form)
    _ParentForm = ParentForm
    End Sub

    Public Sub New(ParentForm As Form, MessageText As String, Optional Sleep As Integer = 1000)
    _ParentForm = ParentForm

    OpenSplashForm()
    SetMessageText(MessageText, Sleep)
    End Sub

    #End Region

    #Region "IDISPOSABLE SUPPORT"

    Private disposedValue As Boolean

    Protected Overridable Sub Dispose(disposing As Boolean)
    If Not Me.disposedValue Then
    If disposing Then
    ' TODO: dispose managed state (managed objects).
    End If
    End If
    Me.disposedValue = True
    End Sub

    Public Sub Dispose() Implements IDisposable.Dispose
    Dispose(True)
    GC.SuppressFinalize(Me)
    End Sub

    #End Region

    #Region "PRIVATE SUBS"

    Private Sub _Close()
    If f Is Nothing Then
    Exit Sub
    End If

    f.Close()
    f = Nothing
    End Sub

    Private Sub _ShowForm()
    f = New FP_SplashForm
    'f.TopMost = True
    f.ShowDialog()
    End Sub

    #End Region

    #Region "PUBLIC SUBS"

    Public Sub CloseSplashForm()
    If f Is Nothing Then
    Exit Sub
    End If

    f.Invoke(New MethodInvoker(AddressOf _Close))

    If t Is Nothing Then
    Exit Sub
    End If

    t.Join()
    End Sub

    Public Sub SetMessageText(MessageText As String, Optional Sleep As Integer = 0)
    System.Threading.Thread.Sleep(200) 'Azert kell ide, mert kulonben az InvokeRequired utasitas hibat general

    If f.InvokeRequired Then
    f.Invoke(New SetMessageTextDelegate(AddressOf SetMessageText), MessageText)

    If Sleep > 0 Then
    System.Threading.Thread.Sleep(Sleep)
    End If
    Else
    f.MessageText_Label.Text = MessageText
    End If
    End Sub

    Public Sub OpenSplashForm()
    t = New Threading.Thread(AddressOf _ShowForm)
    t.SetApartmentState(Threading.ApartmentState.STA)
    t.Priority = Threading.ThreadPriority.Highest
    t.Name = "SplashFormThread"

    t.Start()
    End Sub

    #End Region

    End Class

Új hozzászólás Aktív témák

Hirdetés