c# - 异步后如何在主线程上运行代码
问题描述
我的代码只能在主线程上运行,但在该代码可以运行之前,我需要初始化一个对象。无论如何我可以强制异步代码运行同步吗?等待之后的函数是 API 调用,因此我不能直接修改它们。
public partial class MainWindow : Window
{
private MustBeInit mbi;
public MainWindow() {
InitializeComponent();
// async code that initializes mbi
InitMbi();
// mbi must be done at this point
SomeCodeThatUsesMbi();
}
public async void InitMbi() {
mbi = new MustBeInit();
await mbi.DoSomethingAsync();
await mbi.DoSomethingElseAsync();
// is there any way i can run these two methods as not await and
// run them synchronous?
}
public void SomeCodeThatUsesMbi() {
DoSomethingWithMbi(mbi); // mbi cannot be null here
}
}
解决方案
您不能在构造函数中使用 await ,但您可以将整个事情放入订阅Loaded
事件的异步事件处理程序中Window
:
public MainWindow()
{
this.Loaded += async (s, e) =>
{
await InitMbi();
// mbi must be done at this point
SomeCodeThatUsesMbi();
};
InitializeComponent();
}
并且不要忘记将您的返回值更改InitMbi()
为Task
:
public async Task InitMbi()