2017-03-29 1 views
0

비동기 호출을 수행하고 데이터 집합을 다시 가져 오는 C# 코드가 있습니다. Windows 데스크톱 UI가 검색되는 동안 멈추지 않거나 고정되지 않도록이 작업을 수행합니다. 지금은 vb.net에서 동일한 작업을 수행해야하지만 온라인 코드 변환기를 통해 퍼팅 한 후에 오류가 발생합니다.C#에서 VB로 코드 변환기를 사용하여 올바르게 오지 않는 비동기 스레딩

Delegate 'Func (Of String, Boolean, DataSet)'은 해당 생성자의 유일한 인수로 'AddressOf'표현식 또는 람다식이 필요합니다.

변환 전후의 코드입니다.

Dim DataFunc As var = New Func(Of String, String, DataSet)(getData) 

Dim Result As IAsyncResult = DataFunc.BeginInvoke(barCodeResult, orderType, Nothing, Nothing) 

Dim ds As DataSet = mtrDataFunc.EndInvoke(Result) 

당신의 통찰력 사전에 대단히 감사합니다

var DataFunc = new Func<string, string, DataSet> (getData); 

IAsyncResult Result = DataFunc.BeginInvoke(barCodeResult, orderType, null, null); 

DataSet ds = DataFunc.EndInvoke(Result); 

후 : 전에

.

+1

는 대신 컨버터를 사용하는 언어를 이해해야합니다. 거의 모든 .NET 코드는 C#으로 작성되었습니다. 원래의 C# 코드는 * 좋지 않습니다. 나는 그것이 아주 오래된 프로젝트에서 복사되었다고 생각한다. 당신은'var result = await Task.Run (() => getData (barCodeResult, orderType)); '로 대체 할 수 있습니다. VB.NET에서 이에 해당하는 것은'Dim result = Await Task.Run (Function() getData (barCodeResult, orderType)) '입니다.' –

+0

'getData'는 무엇을합니까? 함수가 데이터베이스 응답을 기다리는 경우 백그라운드에서 아무 것도 실행하지 않아도됩니다. ADO.NET 자체는 비동기 작업을 지원합니다. 예 :'SqlCommand.ExecuteReaderAsync'를 사용하여 독자를 비동기 적으로 반환 할 수 있습니다 –

+0

내 대답이 내 문제를 해결하면 내 게시물 왼쪽의 체크/체크 표시를 눌러 "허용"으로 표시하십시오. 자세한 내용은 다음을 참조하십시오. [** 어떻게 대답을 받아들이 는가? **] (https://meta.stackexchange.com/a/5235) –

답변

1

할 두 가지 수정 사항이 있습니다

var라는 데이터 유형이 없습니다
  1. . 이 경우 As var =As New으로 바꿀 수 있습니다.

  2. 오류 상태로 Func 생성자에 전달하는 메서드 앞에 AddressOf을 추가하여 대리자를 만들어야합니다.

    Dim DataFunc As New Func(Of String, String, DataSet)(AddressOf getData) 
    
+2

좋은 답변이지만 유추 된 typing과 일반적인 VB에서는 'Option Infer On '을 입력 한 다음 유형을 생략합니다. Dim DataFunc = ... –

+1

2012 년부터 실제 결과는'Dim result = Await Task.Run (Function() getData (barCodeResult, orderType))'입니다. –

+0

@DaveDoknjas : 처음에는 그랬지만 편집이 시작되기 5 분 안에 편집했습니다. –

관련 문제