异步无阻塞委托 学习1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Threading;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication21
{
public partial class WebForm1 : System.Web.UI.Page
{
public delegate string testHandler();

public delegate void aa(object sender, SelectEventArgs e);

public event aa ea;

protected void Page_Load(object sender, EventArgs e)
{
ea += WebForm1_ea;
if (Request["_method"] == "search")
{

testHandler t = test;

IAsyncResult result= t.BeginInvoke(callback, t);

}

}

private void WebForm1_ea(object sender, SelectEventArgs e)
{

string r = e.DataSource;
}

private void callback(IAsyncResult tag)
{
AsyncResult result = (AsyncResult)tag;

// 取得委托
testHandler del = (testHandler)result.AsyncDelegate;

// 取得委托后,我们需要在其上执行EndInvoke。
// 这样就可以取得函数中的执行结果。
string strReturnValue = del.EndInvoke(result);
var onAfterSelect = this.ea;
onAfterSelect?.Invoke(this, new SelectEventArgs(strReturnValue));
}

public string test( )
{
return "tt";
}
}
public class SelectEventArgs : EventArgs
{
private string _dataSource = null;
public string DataSource
{
get { return _dataSource; }
}

public SelectEventArgs(String data)
{
_dataSource = data;
}
}
}

原文地址:https://www.cnblogs.com/kexb/p/4960439.html