线程同步,命令行程序创建承载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 应用程序,请执行以下步骤:

  1. 在你喜欢的开发环境(如 Visual Studio)中创建一个新的 WPF 应用程序项目。
  2. 在 MainWindow.xaml 文件中,使用 XAML 定义应用程序的用户界面。
  3. 在 MainWindow.xaml.cs 文件中,使用 .NET 代码定义应用程序的逻辑。
  4. 在 App.xaml 文件中,定义应用程序的资源和样式。
  5. 在 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();

 

posted @ 2024-03-20 15:26  卖雨伞的小男孩  阅读(16)  评论(0编辑  收藏  举报