在从另一个线程发送 Intent 之前我需要额外的准备吗?
Do I need extra preparation before sending Intent from another thread?
我使用术语 Task context -- 作为 C# 任务类型 -- 和 Android context区分这两个实体。
最好要求 100% 确定 -- 当您使用 WPF 或 WindowsForms 时,您无法与 UI 自由交互。例如,当您使用 await
时,您希望保留任务上下文(因此通常没有 ConfigureAwait(false)
)。
所以我的问题是——当我尝试从另一个线程发送意图时,我是否也必须做一些准备,比如当我使用 await
时,我是否必须保留任务上下文?或者是发送准备本身的行为 - 类似于(牵强的)WPF 中的 Dispatcher.Invoke
类比?
换句话说,只要我的 Android 上下文有效,无论我在哪个线程上,我都可以盲目发送意图吗?或者它可能取决于目标线程——例如,当它是 main/UI 线程时,我应该做一些额外的事情,或者它保证始终正常工作?
假设您已经正确使用了 async 和 await 模式,那么应该不需要 marshal 回到 UI线程。它与 winforms 和 WPF.
中的相同
规则的例外情况是当您知道自己 不是 运行 UI 上下文 (即,如果您使用 Task.Run
卸载到另一个线程等),在这种情况下,您将调用以下命令 marshal 回到 UI线程:
Device.BeginInvokeOnMainThread
Invokes an Action on the device main (UI) thread.
上面的Xamarin.Forms相当于Dispatcher.Invoke
.
我使用术语 Task context -- 作为 C# 任务类型 -- 和 Android context区分这两个实体。
最好要求 100% 确定 -- 当您使用 WPF 或 WindowsForms 时,您无法与 UI 自由交互。例如,当您使用 await
时,您希望保留任务上下文(因此通常没有 ConfigureAwait(false)
)。
所以我的问题是——当我尝试从另一个线程发送意图时,我是否也必须做一些准备,比如当我使用 await
时,我是否必须保留任务上下文?或者是发送准备本身的行为 - 类似于(牵强的)WPF 中的 Dispatcher.Invoke
类比?
换句话说,只要我的 Android 上下文有效,无论我在哪个线程上,我都可以盲目发送意图吗?或者它可能取决于目标线程——例如,当它是 main/UI 线程时,我应该做一些额外的事情,或者它保证始终正常工作?
假设您已经正确使用了 async 和 await 模式,那么应该不需要 marshal 回到 UI线程。它与 winforms 和 WPF.
中的相同规则的例外情况是当您知道自己 不是 运行 UI 上下文 (即,如果您使用 Task.Run
卸载到另一个线程等),在这种情况下,您将调用以下命令 marshal 回到 UI线程:
Device.BeginInvokeOnMainThread
Invokes an Action on the device main (UI) thread.
上面的Xamarin.Forms相当于Dispatcher.Invoke
.