试图从控制台调用 WPF 程序 [重复]

Posted

技术标签:

【中文标题】试图从控制台调用 WPF 程序 [重复]【英文标题】:Trying to call WPF program from Console [duplicate] 【发布时间】:2021-06-12 17:12:02 【问题描述】:

总而言之:我有一个带有套接字的服务器的控制台应用程序,如果用户键入 -w 作为 args[],​​我希望具有在 WPF 中的功能。问题是当我调用 RunServer() 方法时,侦听器正在侦听并且 WPF 窗口被冻结。我想要对窗口进行的唯一更新是使用 SendEvent() 方法,该方法将消息添加到窗口 TextBox。我尝试创建线程、后台工作人员,但似乎没有任何效果。当它实际转到更改文本的行时,会出现一个异常,指出“调用线程无法访问此对象,因为不同的线程拥有它 “。有人可以提出解决方案吗?我没有做的唯一建议是“切换到 .Net Core”。

if (GUI)

                 
    Window1 window = new Window1();
    RunServer();

public Window1(bool saving, bool logging)
        
            InitializeComponent();
            IsSavingLogging(saving, logging);
            Events.Text += "Test\r\n";
            try
            
                Show();
                Update("Test2\r\n");//this doesn't work
             
            
            catch (Exception e)
            
                // if there was an error in the processing- catch it and note the details
                //Update( "Exception: " + e.ToString());
            
        
public static void RunServer(Window1 pWindow1)
        
            TcpListener listener;
            Socket connection;
            Handler requestHandler;
            try
            
                //create a tcp socket to listen on port 43 fo incoming requests
                // and start listening
                listener = new TcpListener(IPAddress.Any, 43);
                SendEvent( "Server Started", GUI,pWindow1);
                listener.Start();

                while (true)
                
                    connection = listener.AcceptSocket();
                    requestHandler = new Handler();
                    Thread t = new Thread(() => requestHandler.DoRequest(connection,pWindow1));
                    t.Start();

                
            
            catch (Exception e)
            
                // if there was an error in the processing- catch it and note the details
                SendEvent( "Exception: " + e.ToString(),GUI,pWindow1);
            

        
private static void SendEvent(string pMessage, bool pGui,Window1 window1)
        
            
            if (pGui)
            
                window1.Events.Text += pMessage+"\r\n";
            
            else 
                Console.WriteLine(pMessage);
            
        

【问题讨论】:

我不确定您的控制台应用程序和 WPF 应用程序之间的关系,但您至少可以修复异常。 ***.com/questions/9732709/… 【参考方案1】:

如果您因为与我处于同一位置而来到这里,我发现我可以创建另一个无响应的窗口并将文本放在那里。我加了

this.Show();
Thread.Sleep(15000);//15 seconds timeout
this.Close();

这就是工作 此外,您必须从一个单独的线程调用此窗口,该线程是

Thread t= new Thread(()=> window=new Window(pMessage));

至少我希望这对某人有所帮助

【讨论】:

以上是关于试图从控制台调用 WPF 程序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从控制台应用程序启动 WPF 窗口

WPF 调用库不起作用(线程问题)

当我尝试在 wpf 中打开它两次时,控制台崩溃了

从控制台应用程序 exe 在 DLL 中启动 WPF 应用程序

WPF:删除标题/控制框

获取 WPF 的程序集版本