다음 문제를 해결하는 데 어려움이 있지만 매우 힘듭니다. 버튼을 클릭 할 때 대리인을 호출하는 응용 프로그램이 있습니다. 그것은 다음과 같습니다대리자가 콜백에 반환 값을 반환했습니다.
는private void button1_Click(object sender, EventArgs e)
{
MyTaskWorkerDelegate worker = new MyTaskWorkerDelegate(returnANumber);
AsyncCallback completedCallback = new AsyncCallback(DelegateMethod);
object[] myArray = new object[1];
myArray[0] = "The number is: ";
worker.BeginInvoke(completedCallback,myArray);
}
수 100 그것은 다음과 같습니다 는 "returnANumber가"는 다음 반환 1 초 잠을하도록되어있어서,
: 수면은
private int returnANumber()
{
Thread.Sleep(1000);
return 100;
}
이상이며,
때 번호가 반환 된 까다로운 부분이 온다. click 함수에서 생성 된 배열은 콜백 메소드에 전달됩니다. 이 메서드는 배열의 문자열과 대리자에서 반환 한 번호를 나타내는 MessageBox를 표시합니다. 내가 대리자 메서드에서 반환됩니다 값에 액세스 할 수있는 방법을 알아 ... 나를 :(도와주세요 어차피private void DelegateMethod(IAsyncResult arr)
{
object[] myArray = (object[])arr.AsyncState;
//Messagebox should show "The number is: 100"
MessageBox.Show(myArray[0].ToString() + theNumberFromTheMethos);
}
이
당신은 그 모든 것을'Task.Run()'으로 대체해야합니다. 이것은 사용하기 쉽고 _far_ 사용하기 쉽습니다. – SLaks
태그를 편집하고 [asp.net]을 (를) 제거했습니다. WinForms 앱, 즉 MessageBox.Show와'button1_Click '을 사용하는 방식이라고 가정합니다. – Noseratio