The starting point Winforms to WPF

本文关键字:to WPF Winforms point starting The | 更新日期: 2023-09-27 18:23:55

WPF的起点是什么?

[STAThread]
    static void Main() 
    {      
        ClientClass remService  = new ClientClass();
        ObjRef obj = RemotingServices.Marshal(remService,"TcpClient");
        // Create apllications MainForm
        ClientApp frmMain = new ClientApp();
        // provide marshaled object with reference to Application
        remService.theMainClient = ( IClientApp) frmMain;
        System.Console.WriteLine("Please press ENTER to exit...");
        System.Console.ReadLine();      

        // Application closed...
        Application.Run(frmMain);

        RemotingServices.Unmarshal(obj);
        RemotingServices.Disconnect(remService);
    }

在winforms编组工作正常的情况下,我想转换它和WPF。

    [System.STAThreadAttribute()]
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]
    static void Main()
    {
        OperClass remService = new OperClass();
        ObjRef obj = RemotingServices.Marshal(remService, "TcpClient");
        // Create apllications MainForm
        MainWindow frmMain = new MainWindow();
        App app = new App();
        // provide marshaled object with reference to Application
        remService.TheMainOper = (IOperApp)frmMain;
        Console.WriteLine("Please press ENTER to exit...");
        Console.ReadLine();

        // Application closed...
        app.InitializeComponent();
        app.Run();
        RemotingServices.Unmarshal(obj);
        RemotingServices.Disconnect(remService);
    }

我这样做了,但我不太确定什么是正确的,因为程序的工作原理并不完全正确。

pastebin.com/u/Jinfaa代码http://screencast-o-matic.com/watch/clniI54tY视频

The starting point Winforms to WPF

在mainwindow.xaml.cs的第240行,将this.Dispatcher.BeginInvoke更改为this.Dispatcher.InvokeBeginInvoke可以运行一些异步voodoo,但我从未能够正常工作。最好使用普通的旧Invoke,除非您有特定的异步工作原因,而我很少这样做

更改MainWindow类,使其扩展Window

不要使用CheckAccess()

更改其他BeginInvoke调用,以便直接从与窗口相同的线程调用该方法或使用Invoke。我想它可能已经和窗口在同一个线程中了。我没有仔细看。

你还需要做很多其他的小改变;你需要从头开始。在尝试这样的东西之前,你应该更深入地学习WPF。