如何更好地在Xamarin.Forms上使用AsyncNetwork来使用ObservableCollection?
我正在使用Xamarin.forms制作应用程序。 它工作得很好 但问题是大部分时间都很好,但有时会崩溃。 我猜其中一个线索是我使用ObservableCollection的方式是错误的。 当我使用背景线程时,我应该小心使用它,不是吗 我在下面写了不同的类型。 请告诉我最好的使用方法 选项2是正确的使用方法吗?(应该吗?) (我在询问必须调用异步方法或匿名方法的情况) 谢谢 选项1(我一直在使用此选项) 选择2 选择3 选择4如何更好地在Xamarin.Forms上使用AsyncNetwork来使用ObservableCollection?,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我正在使用Xamarin.forms制作应用程序。 它工作得很好 但问题是大部分时间都很好,但有时会崩溃。 我猜其中一个线索是我使用ObservableCollection的方式是错误的。 当我使用背景线程时,我应该小心使用它,不是吗 我在下面写了不同的类型。 请告诉我最好的使用方法 选项2是正确的使用方法吗?(应该吗?) (我在询问必须调用异步方法或匿名方法的情况) 谢谢 选项1(我一直在使用此选项) 选择2 选择3 选择4 如果需要在异步操作后在UI线程上执行某些操作,则不应在此层中使用Co
如果需要在异步操作后在UI线程上执行某些操作,则不应在此层中使用
ConfigureAwait(false)
。在我看来,使用ConfigureAwait(false)
然后使用Device.beginInvokeMainThread(…)
是一种反模式,因为您关闭了对调用线程的自动分派,而调用线程会为您进行await
async void SomeMethod()
{
var result=wait client.PostAsync(url、内容);
if(result.StatusCode==HttpStatusCode.OK)
{
ImObservableCollection.Add(某物);
}
}
如果SomeMethod
的调用线程不是UI线程,则可以使用:
async void SomeMethod()
{
var result=await client.PostAsync(url、内容).ConfigureAwait(false);
if(result.StatusCode==HttpStatusCode.OK)
{
Device.beginInvokeMainThread(()=>ImObservableCollection.Add(something));
}
}
这就是一般性的答案。请将错误消息添加到您的问题中,以便我们检查其他可能的错误原因
注意:如果
Somemethod
不是回调或事件处理程序,请使用Task
而不是void
作为返回值。这是一个最佳实践。崩溃后的堆栈跟踪显示了什么?请将其添加到您的帖子中。否则,你就很难帮助汉克斯·斯文了。大家好,我是xabre的ble插件github的开发者。
void SomeMethod()
{
Task.Run(async () =>
{
var result = await client.PostAsync(url, content).ConfigureAwait(false);
if (result.StatusCode == HttpStatusCode.OK)
{
ImObservableCollection.Add(something);
}
}
}
void SomeMethod()
{
Task.Run(async () =>
{
var result = await client.PostAsync(url, content).ConfigureAwait(false);
if (result.StatusCode == HttpStatusCode.OK)
{
Device.BeginInvokeOnMainThread(() => ImObservableCollection.Add(something));
}
}
}
void SomeMethod()
{
Device.BeginInvokeOnMainThread(async () =>
{
var result = await client.PostAsync(url, content).ConfigureAwait(false);
if (result.StatusCode == HttpStatusCode.OK)
{
ImObservableCollection.Add(something);
}
}
}
void SomeMethod()
{
getsomething();
}
void async getsomething()
{
var result = await client.PostAsync(url, content).ConfigureAwait(false);
if (result.StatusCode == HttpStatusCode.OK)
{
ImObservableCollection.Add(something);
}
}