C# 如何在不关闭线程的情况下重新调用运行在线程中的窗口#

C# 如何在不关闭线程的情况下重新调用运行在线程中的窗口#,c#,wpf,multithreading,C#,Wpf,Multithreading,我在WPF、C#、VisualStudio 2013工作,我在解决这个问题。我将分步骤解释: 1-从主线程(Windows1)我想显示一个辅助窗口(Windows2)。因此,我调用线程的函数: 为了解决这个问题,我搜索了很多,找到了答案,这一点没有问题。代码如下(): 请注意,行Windows2=newWindowsPredefine(param1,param2,…,paramN)在后台线程中创建第二个窗口的位置 2-我想在Windows2和Windows1之间建立通信。因此,我通过创建并Rou

我在WPF、C#、VisualStudio 2013工作,我在解决这个问题。我将分步骤解释:

1-从主线程(Windows1)我想显示一个辅助窗口(Windows2)。因此,我调用线程的函数:

为了解决这个问题,我搜索了很多,找到了答案,这一点没有问题。代码如下():

请注意,行Windows2=newWindowsPredefine(param1,param2,…,paramN)在后台线程中创建第二个窗口的位置

2-我想在Windows2和Windows1之间建立通信。因此,我通过创建并
RoutedeventHandler
实现了这一点。因此,Windows2可以在完成任务后与Windows1通信。问题出现在步骤3中

3-现在,由于Windows2已经完成了它的任务,我们希望从Windows1重新开始Windows2中的所有进程(不关闭它),但只是在调用构造函数
WindowsPredefine(param1,param2,…,paramN)时更改一些参数值

我试过几种方法,但任何一种都有效。。。例如,我将Windows2定义为全局变量,并尝试从主线程调用构造函数(我已首次公开访问),但它不允许我从主窗口(Windows1)重新调用线程中运行的函数


我如何处理这个问题?谢谢你的帮助

将一些构造函数参数设置为公共属性,稍后设置/更改它们的值。我会尝试,但不起作用,这不仅仅是设置/更改值。我想重新调用构造函数中的所有函数。什么函数?属性具有设置器是有原因的,例如,如果属性值更改,您可以引发事件或直接调用方法。它在Sinatr中工作,感谢您的建议!
 ... CreatethreadWindow(...);
 void threadWindow1(...)
    {
       
        Thread newWindowThread = new Thread(new ThreadStart(() =>
        {
            // Create our context, and install it:
            SynchronizationContext.SetSynchronizationContext(
                new System.Windows.Threading.DispatcherSynchronizationContext(
                    System.Windows.Threading.Dispatcher.CurrentDispatcher));

            // Create and show the Window
            Windows2= new WindowsPredefine(param1, param2,..., paramN);
            // Create an event handler to communicate events from windows 2 to the main windows.  
           Windows2.Windows2EventHandler += new RoutedEventHandler(NewDataFromWindows2EventHandler);            
            Windows2.Closed += (sender1, e1) => Windows2.Dispatcher.BeginInvokeShutdown(System.Windows.Threading.DispatcherPriority.Background);
            Windows2.Show();
         
            // Start the Dispatcher Processing
            System.Windows.Threading.Dispatcher.Run();
        }));

        // Set the apartment state
        newWindowThread.SetApartmentState(ApartmentState.STA);
        // Make the thread a background thread
        newWindowThread.IsBackground = true;
        // Start the thread
        newWindowThread.Start();
    }