线程同步,命令行程序创建承载WPF程序运行的另一种实现
WPF Application 类
注意:一个AppDomain只能创建一个Application,Application不是线程级别的,而是应用(Appdomain)级别的。
WPF Application 类是 WPF 应用程序的核心。它负责管理应用程序的生命周期、创建和管理应用程序的主窗口、处理应用程序事件以及提供对应用程序资源的访问。
主要方法和属性
WPF Application 类包含以下主要方法和属性:
- 构造函数: 构造函数用于初始化应用程序对象。
- Startup: Startup 方法在应用程序启动时调用。它通常用于创建应用程序的主窗口。
- Exit: Exit 方法在应用程序退出时调用。它通常用于释放应用程序使用的资源。
- MainWindow: MainWindow 属性获取或设置应用程序的主窗口。
- ShutdownMode: ShutdownMode 属性获取或设置应用程序关闭时的行为。
- Resources: Resources 属性获取应用程序的资源字典。资源字典包含应用程序使用的资源,例如图像、样式和数据模板。
职责
WPF Application 类的主要职责包括:
- 管理应用程序生命周期: Application 类负责管理应用程序的生命周期,从启动到退出。它处理应用程序启动、运行和关闭时的事件。
- 创建和管理主窗口: Application 类负责创建和管理应用程序的主窗口。主窗口是应用程序用户界面的主要部分。
- 处理应用程序事件: Application 类处理应用程序事件,例如应用程序启动、关闭和异常。
- 提供对应用程序资源的访问: Application 类提供对应用程序资源的访问,例如图像、样式和数据模板。
创建 WPF 应用程序
要创建 WPF 应用程序,请执行以下步骤:
- 在你喜欢的开发环境(如 Visual Studio)中创建一个新的 WPF 应用程序项目。
- 在 MainWindow.xaml 文件中,使用 XAML 定义应用程序的用户界面。
- 在 MainWindow.xaml.cs 文件中,使用 .NET 代码定义应用程序的逻辑。
- 在 App.xaml 文件中,定义应用程序的资源和样式。
- 在 App.xaml.cs 文件中,定义应用程序类的逻辑。
示例
以下是一个简单的 WPF 应用程序示例:
MainWindow.xaml
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Button Content="Click Me!" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid> </Window>
MainWindow.xaml.cs
using System.Windows; namespace WpfApplication1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Button clicked!"); } } }
App.xaml
<Application x:Class="WpfApplication1.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Application.Resources> </Application.Resources> </Application>
App.xaml.cs
using System.Windows; namespace WpfApplication1 { public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); // 创建应用程序的主窗口 MainWindow mainWindow = new MainWindow(); // 显示主窗口 mainWindow.Show(); } } }
结论
WPF Application 类是 WPF 应用程序的基础。它提供了管理应用程序生命周期、创建和管理主窗口、处理应用程序事件以及提供对应用程序资源的访问所需的基本功能。理解 WPF Application 类的职责对于创建健壮且可维护的 WPF 应用程序至关重要。
实现
using System.Windows; using System.Windows.Markup; using System.Windows.Threading; using UiDll; Thread _uiThread = null; Application application = null; var tcs = new TaskCompletionSource<bool>(); _uiThread = new Thread(() => { application =new Application { ShutdownMode = ShutdownMode.OnExplicitShutdown }; Window window = new Window(); tcs.SetResult(true); application.Run(); }); _uiThread.SetApartmentState(ApartmentState.STA); _uiThread.IsBackground = true; _uiThread.Start(); await tcs.Task.ConfigureAwait(false); // 在主线程上等待 UI 线程准备好 while (application == null) { Thread.Sleep(100); } await application.Dispatcher.BeginInvoke(() => { var win = new WinTest(); win.Show(); }); Console.WriteLine("hello world!"); Console.ReadLine();