gpt4 book ai didi

multithreading - 不同线程上的响应回调

转载 作者:行者123 更新时间:2023-12-03 13:00:46 25 4
gpt4 key购买 nike

是否应该在其他线程上调用回调?
使用此代码:

client.ExecuteAsync<List<IngredientDto>>(request, Response =>
{
textBox1.Text += Response.Data.Count;
});

我收到“InvalidOperationException”:

"The calling thread cannot access this object because a different thread owns it."



回调不应该放在UI线程上,还是我错了?

最佳答案

实际上,如果您查看源代码,就会看到

    public virtual RestRequestAsyncHandle ExecuteAsync<T>(IRestRequest request, Action<IRestResponse<T>, RestRequestAsyncHandle> callback)
{
return ExecuteAsync(request, (response, asyncHandle) =>
{
IRestResponse<T> restResponse = response as RestResponse<T>;
if (response.ResponseStatus != ResponseStatus.Aborted)
{
restResponse = Deserialize<T>(request, response);
}

callback(restResponse, asyncHandle);//<--- this means that response & callback are executed at **same** thread.
});
}

这导致:
您无法通过非ui线程更新ui对象。如果使用WPF,则可以使用 Dispatcher
client.ExecuteAsync<List<IngredientDto>>(request, Response =>
{
Dispatcher.Invoke((Action)() => {textBox1.Text += Response.Data.Count;});
});

一般情况下,请参见 syncronization context

关于multithreading - 不同线程上的响应回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10580013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com