발송인.호출 시작: 람다를 시스템으로 변환할 수 없습니다.위임
전화하려고 합니다.System.Windows.Threading.Dispatcher.BeginInvoke메서드의 시그니처는 다음과 같습니다.
BeginInvoke(Delegate method, params object[] args)
대리자를 만드는 대신 람다를 전달하려고 합니다.
_dispatcher.BeginInvoke((sender) => { DoSomething(); }, new object[] { this } );
컴파일러 오류가 발생했습니다.
람다를 시스템으로 변환할 수 없습니다.위임합니다.
위임자의 서명은 개체를 매개 변수로 사용하고 void를 반환합니다.제 람다는 이것과 일치하지만, 작동하지 않습니다.제가 무엇을 빠뜨리고 있나요?
단축:
_dispatcher.BeginInvoke((Action)(() => DoSomething()));
이 방법은 시스템을 사용하기 때문입니다.대리인, 대리인에게 특정 유형의 대리인을 지정해야 하며, 그렇게 선언해야 합니다.이 작업은 캐스트를 통해 수행하거나 새 딜러를 통해 지정된 딜러를 생성하여 수행할 수 있습니다.다음과 같이 입력합니다.
_dispatcher.BeginInvoke(
new Action<MyClass>((sender) => { DoSomething(); }),
new object[] { this }
);
또한, SLaks가 지적했듯이, Dispatcher.BeginInvoke는 매개 변수 배열을 사용하므로 다음과 같이 쓸 수 있습니다.
_dispatcher.BeginInvoke(
new Action<MyClass>((sender) => { DoSomething(); }),
this
);
또는 DoSomething이 이 개체 자체의 메서드인 경우:
_dispatcher.BeginInvoke(new Action(this.DoSomething));
인라인 람다 사용 중...
Dispatcher.BeginInvoke((Action)(()=>{
//Write Code Here
}));
시스템을 참조하는 경우.창문들.프로젝트의 presentation.dll을 추가합니다.using System.Windows.Threading그러면 람다 구문을 사용할 수 있는 확장 방법에 액세스할 수 있습니다.
using System.Windows.Threading;
...
Dispatcher.BeginInvoke(() =>
{
});
우리는 이를 위한 확장 방법을 만듭니다.예.
public static void BeginInvoke(this Control control, Action action)
=> control.BeginInvoke(action);
이제 우리는 형태 내에서 그것을 부를 수 있습니다.this.BeginInvoke(() => { ... }).
언급URL : https://stackoverflow.com/questions/4936459/dispatcher-begininvoke-cannot-convert-lambda-to-system-delegate
'programing' 카테고리의 다른 글
| $name 필드는 누적 개체여야 합니다. (0) | 2023.05.09 |
|---|---|
| 작업 완료 시기소스를 사용하시겠습니까? (0) | 2023.05.09 |
| Git 하위 모듈을 하위 디렉터리에 추가하려면 어떻게 해야 합니까? (0) | 2023.05.04 |
| IPython 변수를 bash 명령에 대한 인수로 전달 (0) | 2023.05.04 |
| Android xml 오류: RelativeLayout(@id/LinearLayout_acc, @id/ProgressBar_statusScreen)이 있는 "지정된 이름과 일치하는 리소스를 찾을 수 없습니다" (0) | 2023.05.04 |