C# 哪根线是一根开始弯曲的线';异步委托的回调是否在?

C# 哪根线是一根开始弯曲的线';异步委托的回调是否在?,c#,winforms,C#,Winforms,BeginInvoke对异步委托的回调应该在哪个线程中? UI线程或线程池线程 比如说 private void button1_Click(object sender, EventArgs e) { Func<string> func1 = LoadingDada; func1.BeginInvoke(IsDone, func1); } string LoadingDada() { Thread.Sleep(10000); //simulated a

BeginInvoke对异步委托的回调应该在哪个线程中?
UI线程或线程池线程

比如说

private void button1_Click(object sender, EventArgs e)
{
    Func<string> func1 = LoadingDada;
    func1.BeginInvoke(IsDone, func1);
}


string LoadingDada()
{
    Thread.Sleep(10000);  //simulated a long running
    x = Thread.CurrentThread.Name;
    return "str_100000";
}

string IsDone(IAsyncResult a) 
{
    var loadingDataReturn = (Func<string>)a.AsyncState;
    string rr = loadingDataReturn.EndInvoke(a);

    textBox1.Text = rr;
} 
private void按钮1\u单击(对象发送者,事件参数e)
{
Func func1=加载数据;
功能1.开始通话(IsDone,功能1);
}
字符串加载数据()
{
Thread.Sleep(10000);//模拟长时间运行
x=Thread.CurrentThread.Name;
返回“str_100000”;
}
字符串IsDone(IAsyncResult a)
{
var loadingDataReturn=(Func)a.AsyncState;
字符串rr=loadingDataReturn.EndInvoke(a);
textBox1.Text=rr;
} 

您正在对代理调用
BeginInvoke
,因此它将是一个池线程。如果在控件上调用
BeginInvoke
,它将是UI线程


不幸的是,
BeginInvoke
在这两种情况下的含义几乎完全相反。

如何将代码放入块中?Func无法显示。代码缩进了4个空格(或更多)。请尝试选择您的代码并单击“代码”按钮(0和1)。@Mark,我可以在IsDone()中更新UI控件。所以它在UI线程中?希望有人还在听。。。恐怕我觉得答案有点混乱。我想用不同的措辞来回答这个问题:回调是在原始BeginInvoke调用的同一个线程上调用的,还是从BeginInvoke用于执行指定内容的线程调用的?@Mike当BeginInvoke用于代理时,回调将始终发生在不同的线程上-工作线程/池线程。