如何在使用自定义启动时“恢复”SynchronizationContext?

时间:2017-06-29 08:54:33

标签: wpf synchronizationcontext

我的应用程序工作正常,但现在我想要自定义启动,所以我可以捕获任何错误,从一开始就添加我的日志记录等。

所以我使用了这个答案所示的方法What code controls the startup of a WPF application?

[STAThread]
public static void Main(string[] args) {
    //include custom startup code here

    var app = new MyApplication();//Application or a subclass thereof
    var win = new MyWindow();//Window or a subclass thereof
    app.Run(win); //do WPF init and start windows message pump.
}

只有一个例外情况正常 - SynchronizationContext.Current为空。我需要它: - )

那么如何正确地进行自定义启动并具有同步上下文?

1 个答案:

答案 0 :(得分:1)

不要创建自己的Main方法。覆盖OnStartup文件中的App.xaml.cs方法:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        var win = new MyWindow();
        win.Show();
    }
}

然后你将像往常一样获得SynchronizationContext

请勿忘记从StartupUri文件的<Application>根元素中删除App.xaml属性。