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视频
在mainwindow.xaml.cs的第240行,将this.Dispatcher.BeginInvoke
更改为this.Dispatcher.Invoke
。BeginInvoke
可以运行一些异步voodoo,但我从未能够正常工作。最好使用普通的旧Invoke
,除非您有特定的异步工作原因,而我很少这样做
更改MainWindow
类,使其扩展Window
。
不要使用CheckAccess()
。
更改其他BeginInvoke
调用,以便直接从与窗口相同的线程调用该方法或使用Invoke
。我想它可能已经和窗口在同一个线程中了。我没有仔细看。
你还需要做很多其他的小改变;你需要从头开始。在尝试这样的东西之前,你应该更深入地学习WPF。