Отправная точка Winforms to WPF - PullRequest
       3

Отправная точка Winforms to WPF

1 голос
/ 08 февраля 2012

Как будет такая отправная точка для 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 CODE http://screencast -o-matic.com / часы / clniI54tY ВИДЕО

1 Ответ

1 голос
/ 08 февраля 2012

В mainwindow.xaml.cs, в строке 240, измените this.Dispatcher.BeginInvoke на this.Dispatcher.Invoke.BeginInvoke работает в асинхронном вуду, который я никогда не смог заставить работать должным образом.Вам будет лучше с простым старым Invoke, если у вас нет конкретной причины работать асинхронно, что я редко делаю.

Измените ваш MainWindow класс так, чтобы он расширял Window.

Не используйте CheckAccess().

Измените другой вызов BeginInvoke так, чтобы метод вызывался непосредственно из того же потока, что и окно, или использовал Invoke.Я думаю, что это может быть уже в той же теме, что и окно.Я не присматривался.

Есть много других небольших изменений, которые вам нужно сделать;Вам нужно будет начать все заново.Вы должны изучить WPF более подробно, прежде чем пытаться что-то подобное.

...