안녕하십니까. 대리자를 사용하지 않고 양식 컨트롤을 업데이트하기위한 솔루션을 구현하려고합니다.VB.net에서는 확장 메서드를 사용하여 크로스 스레드 예외를 방지하지 않습니다.
나는이 페이지의 첫번째 솔루션을 사용하려고 시도하고있다 :
http://www.dreamincode.net/forums/blog/143/entry-2337-handling-the-dreaded-cross-thread-exception/
Imports System.ComponentModel
Imports System.Runtime.CompilerServices
Public Module MyInvoke
<Extension()> _
Public Sub CustomInvoke(Of T As ISynchronizeInvoke)(ByVal control As T, ByVal toPerform As Action(Of T))
If control.InvokeRequired Then
control.Invoke(toPerform, New Object() {control})
toPerform(control)
End If
End Sub
End Module
사이트가 사용하는 방법의 예로서이 제공 :
Label1.CustomInvoke(l => l.Text = "Hello World!")
하지만 '가져 l '은 선언 된 오류가 아닙니다. 당신이 볼 수 있듯이, 나는 VB 나 OOP에 아주 새로운 것을 보았습니다.
(위임자를 사용하여) 해당 페이지에서 두 번째 솔루션을 얻을 수 있지만이 스레드에서 할 수있는 작업이 상당히 많아서 각각의 작업에 새 대리자 하위를 작성해야하는 것처럼 보입니다. 낭비.
내가해야 할 일은 콤보 박스에서 첫 번째 항목을 선택하고 선택한 항목으로 textbox.text를 업데이트 한 다음 선택한 항목을 함수에 전달하는 것입니다. 그런 다음 x 초 동안 기다린 다음 두 번째 항목을 선택하여 다시 시작하십시오.
단일 스레드 응용 프로그램에서 작동하도록 할 수는 있지만 응답 성을 유지하려면 인터페이스가 필요합니다.
도움을 주시면 감사하겠습니다.
편집 : 예를 들어 구문을 변경하면 문제가 해결됩니다.
Cross-thread operation not valid: Control 'ComboBox1' accessed from a thread other than the thread it was created on.
: 그러나 난에 (이 그냥 괜찮 았는데)
Label1.CustomInvoke(Sub(l) l.text = "hello world!")
에서 변경하는 경우 : 내가 심지어이 방법을 사용 didnt한다 것처럼
Dim indexnumber As Integer = 0
ComboBox1.CustomInvoke(Sub(l) l.SelectedIndex = indexnumber)
나는 크로스 스레딩 오류
그래서 이제 어디서 시작 했나요? 더 많은 도움을 주시면 감사하겠습니다.
감사합니다, 어리석은 실수. – Steve