2012-02-08 2 views
1

Как будет такая отправная точка для WPF?Начальная точка Winforms для 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 marshalling работает правильно, я хотел бы преобразовать его и 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 ВИДЕО

+0

Вы сами пишете этот код или используете конвертер? Похоже, вы использовали конвертер. Я бы рекомендовал против этого. – Zenexer

+0

Я написал сам. – Feor

+0

В этом случае вы должны удалить атрибут DebuggerNonUserCode. – Zenexer

ответ

1

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

Изменить вас MainWindow класс такой, чтобы он продолжал Window.

Не использовать CheckAccess().

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

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

+0

Программа зависает ... – Feor

+0

Тогда вы нашли свою проблему. Независимо от того, что вы вызываете, зависает - или сам процесс вызова зависает, что так же плохо. – Zenexer

+0

Не совсем, сама функция выполняется, но висит на Диспетчере. – Feor

Смежные вопросы