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