사이트를 둘러 보았습니다.이 주제와 관련하여 찾은 질문은 C# (유지 관리중인 응용 프로그램은 VB.NET으로 작성되었습니다)이므로 간과하면 사과드립니다. 하나. 내 스레드 호출하고 여기 어디에크로스 스레드 작업이 유효하지 않습니다. VB.NET
는 : 여기
Private Sub saveBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles saveBtn.Click
If Not LoadedFilePath = String.Empty Then
Dim oTrd = New Threading.Thread(AddressOf SaveData)
oTrd.Start()
End If
End Sub
그리고하는 방법은 다음과 같습니다
Private Sub SaveData()
SaveData(LoadedFilePath)
End Sub
Private Sub SaveData(ByVal filepath As String)
If InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf SaveData))
End If
Try
Me.Cursor = Cursors.WaitCursor
Dim oSettings As New SettingsClass(filepath)
Dim oEnc As New AES
With oSettings
//' Code removed for brevity
End With
oEnc = Nothing
oSettings.SaveSettings()
savedLbl.Visible = True
If SavedTimeout IsNot Nothing Then
Try
SavedTimeout.StopEvent()
Catch
End Try
End If
SavedTimeout = New TimedEvent(Now.AddSeconds(5))
SavedTimeout.StartEvent()
Me.Cursor = Cursors.Default
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
, 저장 기능이 잘 작동,하지만 난 크로스 스레드 중 오류를 얻을 수 프로그램은 커서를 기본값으로 다시 전환하려고 시도합니다. 이 문제를 해결하려면 어떻게해야합니까?
와우 하하 내가 다른 것을 잊어 버렸다고 믿을 수 없다 ... FTL! 해결책을 가져 주셔서 감사합니다 :) – Anders
@ 앤더스 : 개인적으로 저는'Else'없이 그것을 남기고,'Me.Invoke()'바로 다음에'Return'을 추가하여 더 이상 실행되지 않게합니다. 중첩을 줄임으로써 코드를 읽기 쉽게 유지하는 데 도움이됩니다. – STW
@yoooder : 팁 주셔서 감사 드리며이를 명심하십시오. – Anders