.NET 크로스 스레드 작업이 잘못되었습니다.

카테고리 : 프로그래밍/.Net

C#

 

private delegate void Delegatep(object sender, 여기1 e);

    private void AAA(object sender, 여기1 e)
    {
        if (this.InvokeRequired)
        {
            Delegatep tmpDelegate;
            tmpDelegate = new Delegatep(AAA); // AAA 에는 나 자신을 쓴다.
            this.Invoke(tmpDelegate, sender, e); // 내 자신 쓰레드에서 가능하게 > 다시 나를 호출
        }
        else
            //다시 나를 호출 이후 > 실제 로 실행 하려던 코드
    }

VB.NET

 

    Private Delegate Sub Delegatep(ByVal sender As Object, ByVal e As 여기1)

    Private Sub AAA(ByVal sender As Object, ByVal e As 여기1)
        If Me.InvokeRequired Then
            Dim tmpDelegate As Delegatep
            tmpDelegate = New Delegatep(AddressOf AAA) ' AAA 에는 나 자신을 쓴다.'
            Me.Invoke(tmpDelegate, sender, e) '내 자신 쓰레드에서 가능하게 > 다시 나를 호출'
        Else
            '다시 나를 호출 이후 > 실제 로 실행 하려던 코드'
        End If
    End Sub

이렇게 간단히 해결 가능하다.

구글검색에서 설명이 부족하거나 없는경우가 많아서 글을쓴다..

 

...더보기

내가 수정할수 있는 스레드에 복사하여 만들고 그부분을 수정하는 방식으로 다중 스레드 작업을 실행한다.

코드를 보면 자신을 부르고 내가 부른경우 실제 실행 코드를 작성하여 다중스레드 작업을 처리한다.

 

저작권 보호안내
무단 전재, 재배포 행위는 금지됩니다. (글을 복사하여 게시금지)
본문의 일부(링크용 문장) 인용은 가능하지만, 출처와 링크(a 태그)를 남기셔야 됩니다.
(웹툴을 이용하고, 스크린샷/녹화하는것은 상관없습니다.)

예외적으로. 저에게 허락받은 경우에는 본문을 전재할 수 있습니다.

만약, 본문 공유를 원하신다면 링크 공유를 해주세요

저작권 정책 확인하기
링크 공유하기

 댓글