隐藏进程任务管理器的接口

问题描述:

我在写一个带有多个接口的WPF/C#程序。在某些情况下,我希望一个界面在后台保持打开状态,而另一个界面在前台打开。要做到这一点,我已经使用了interface2.Show()方法,而无需在另一个方法上调用interface1.Close()方法。问题是,在任务管理器现在我有两个程序提到,而它显然只有一个。有一种方法可以在任务管理器中只有一个条目? My task manager with multiple voices隐藏进程任务管理器的接口

看来我的程序将每个接口视为不同的程序。有没有办法解决它?我错在哪里?

谢谢大家!

UPDATE:

scheduler.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Shapes; 

using System.Threading; 
using System.ComponentModel; 
using System.IO; 
using System.Net.Mail; 
using System.Net.Security; 
using System.Data.SqlClient; 
using System.Reflection; 


namespace Testing_Application 
{ 
    /// <summary> 
    /// Interaction logic for scheduler.xaml 
    /// </summary> 
    public partial class scheduler : Window 
    { 

     ParallelTaskScheduler sch; 

     Dictionary<string, string> dict_type; 
     Dictionary<string, string> dict_value; 
     Dictionary<string, string> dict_default; 

     private string className; 
     public string status_active = "Status: active"; 
     public string status_idle = "Status: idle"; 

     public scheduler() 
     { 
      InitializeComponent(); 
      className = this.GetType().ToString().Substring(this.GetType().ToString().LastIndexOf('.') + 1); 
      WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; 
      sch = new ParallelTaskScheduler(4); 
      updateLanguageDatabase(); 
      updateLanguage(); 
      loadContext(); 
      updateList(); 
     } 


     private void add_task_Click(object sender, RoutedEventArgs e) 
     { 
      New_task_1 win1 = new New_task_1(); 
      win1.ShowDialog(); 
     } 


     public void add_new_task(int id) 
     { 
      Job j1 = new Job(id); 
      j1.updateJob(); 
      sch.QueueJob(j1, false); 
      if (sch.stop_scheduler == false) { 
       sch.StopTasks(); 
       sch.RunTasks(); 
      } 
     } 

     private void send_log_Click(object sender, RoutedEventArgs e) { 

     <ect... this methods are interaction logic of the scheduler....> 

    } 

} 

scheduler.xaml:

<Window x:Class="Testing_Application.scheduler" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Activated="window_Activated" 
    Closing="schedulerWindow_Closing" 
    Title="Scheduler" Height="608.582" Width="705" ResizeMode="CanMinimize"> 
<Grid> 
    <Button Name="start_button" Content="Start" HorizontalAlignment="Left" Margin="345,514,0,0" VerticalAlignment="Top" Width="100" Click="start_button_Click" Height="41"/> 
    <Button Name="stop_button" Content="Stop" HorizontalAlignment="Left" Margin="468,514,0,0" VerticalAlignment="Top" Width="100" Click="stop_button_Click" IsEnabled="False" Height="41"/> 
    <Button Name="add_task" Content="Add task" HorizontalAlignment="Left" Margin="363,34,0,0" VerticalAlignment="Top" Width="100" Click="add_task_Click" Height="32"/> 
    <ListView Name="programmed_task_List" HorizontalAlignment="Left" Height="169" Margin="24,118,0,0" VerticalAlignment="Top" Width="649" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Visible" MouseDoubleClick="programmed_task_List_MouseDoubleClick"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="ID" Width="40" DisplayMemberBinding="{Binding ID}" /> 
       <GridViewColumn Header="Status" Width="40" DisplayMemberBinding="{Binding Status}" /> 
       <GridViewColumn Header="Recursive" Width="40" DisplayMemberBinding="{Binding Recur}" /> 
       <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" /> 
       <GridViewColumn Header="Date" Width="120" DisplayMemberBinding="{Binding Date}" /> 
       <GridViewColumn Header="Process" Width="219" DisplayMemberBinding="{Binding Process}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 
    <Button x:Name="config_Button" Content="Configure parameters" HorizontalAlignment="Left" Margin="24,514,0,0" VerticalAlignment="Top" Width="140" Height="41" Click="config_Button_Click"/> 
    <Button x:Name="remove_task" Content="Remove task" HorizontalAlignment="Left" Margin="573,34,0,0" VerticalAlignment="Top" Width="100" Click="remove_task_Click" Height="32"/> 
    <Label Name="status_label" Content="Status: idle" HorizontalAlignment="Left" Foreground="DarkGray" Margin="24,23,0,0" VerticalAlignment="Top" Height="43" Width="254" FontSize="20"/> 
    <ListView x:Name="executed_task_List" HorizontalAlignment="Left" Height="150" Margin="24,344,0,0" VerticalAlignment="Top" Width="649" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Visible" MouseDoubleClick="executed_task_List_MouseDoubleClick"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="ID" Width="40" DisplayMemberBinding="{Binding ID}" /> 
       <GridViewColumn Header="Status" Width="40" DisplayMemberBinding="{Binding Status}" /> 
       <GridViewColumn Header="Recursive" Width="40" DisplayMemberBinding="{Binding Recur}" /> 
       <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" /> 
       <GridViewColumn Header="Date" Width="120" DisplayMemberBinding="{Binding Date}" /> 
       <GridViewColumn Header="Process" Width="219" DisplayMemberBinding="{Binding Process}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 
    <Label Name="done_jobs_Label" Content="Done jobs:" HorizontalAlignment="Left" Margin="24,313,0,0" VerticalAlignment="Top" Width="413"/> 
    <Label Name ="programmed_jobs_Label" Content="Programmed jobs:" HorizontalAlignment="Left" Margin="24,87,0,0" VerticalAlignment="Top" Width="413"/> 
    <Menu HorizontalAlignment="Left" Height="23" VerticalAlignment="Top" Width="699"> 
     <MenuItem Name="mni_Utils" Header="_Utils"> 
      <MenuItem Name="mni_ViewLog" Header="_View Log" Click="view_log_Click" /> 
      <MenuItem Name="mni_SendLog" Header="_Send Log" Click="send_log_Click" /> 
      <MenuItem Name="mni_EraseLog" Header="_Erase Log" Click="erase_log_Click" /> 
      <Separator /> 
      <MenuItem Name="mni_Exit" Header="_Exit" Click="exit_menu_Click" /> 
     </MenuItem> 
     <MenuItem Name="mni_Language" Header="_Language"> 
      <MenuItem Name="mni_LanguageSel" Header="_Select a language" Click="language_sel_Click" /> 
      <MenuItem Name="mni_LanguageTrad" Header="_Translate" Click="translate_Click" /> 
     </MenuItem> 
    </Menu> 
    <Button x:Name="edit_task" Content="Edit task" HorizontalAlignment="Left" Margin="468,34,0,0" VerticalAlignment="Top" Width="100" Click="edit_task_Click" Height="32"/> 
    <Button x:Name="exit_button" Content="Exit" HorizontalAlignment="Left" Margin="593,522,0,0" VerticalAlignment="Top" Width="80" Click="exit_button_Click" Height="25"/> 

</Grid> 
</Window> 

New_task_1.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Shapes; 

using System.IO; 
using System.Data.SqlClient; 
using System.Reflection; 

namespace Testing_Application 
{ 
    /// <summary> 
    /// Interaction logic for New_task_1.xaml 
    /// </summary> 
    public partial class New_task_1 : Window 
    { 

     Boolean edit = false; 
     int ID = -1; 
     private string className; 
     Dictionary<string, string> dict_type; 
     Dictionary<string, string> dict_value; 
     Dictionary<string, string> dict_default; 



     public New_task_1(int id) 
     { 
      InitializeComponent(); 
      this. 
     className = this.GetType().ToString().Substring(this.GetType().ToString().LastIndexOf('.') + 1); 
      updateLanguageDatabase(); 
      updateLanguage(); 
      WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; 
      ID = id; 
      loadTask(ID); 
      edit = true; 
     } 

     public New_task_1() 
     { 
      InitializeComponent(); 
      className = this.GetType().ToString().Substring(this.GetType().ToString().LastIndexOf('.') + 1); 
      updateLanguageDatabase(); 
      updateLanguage(); 
      WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; 
     } 

     public void next_Button_Click(object sender, RoutedEventArgs e) 
     { 
      <ect... other methods> 

     } 
    } 
} 

New_task_1.xaml:

<Window x:Class="Testing_Application.New_task_1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Activated="window_Activated" 
    Title="New task" Height="300" Width="542" ResizeMode="CanMinimize"> 
<Grid> 
    <Label Name="step1_label" Content="New task" HorizontalAlignment="Left" Margin="10,77,0,0" VerticalAlignment="Top" Width="113" Background="Aquamarine"/> 
    <Label Name="step2_label" Content="Trigger" HorizontalAlignment="Left" Margin="10,103,0,0" VerticalAlignment="Top" Width="113"/> 
    <Label Name="step3_label" Content="Action" HorizontalAlignment="Left" Margin="10,129,0,0" VerticalAlignment="Top" Width="113"/> 
    <Label Name="courtesy" Content="Create a new task" HorizontalAlignment="Left" Height="50" Margin="10,22,0,0" VerticalAlignment="Top" Width="514" FontSize="20"/> 
    <Label Name="information" Content="Use this wizard to quickly schedule a new task." HorizontalAlignment="Left" Height="26" Margin="154,77,0,0" VerticalAlignment="Top" Width="370"/> 
    <Label Name="name_label" Content="Name:" HorizontalAlignment="Left" Margin="154,103,0,0" VerticalAlignment="Top" Width="75"/> 
    <Label Name="desc_label" Content="Description:" HorizontalAlignment="Left" Margin="154,129,0,0" VerticalAlignment="Top" Width="75"/> 
    <TextBox Name="name_textBox" HorizontalAlignment="Left" Height="26" Margin="234,103,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="290"/> 
    <TextBox Name="descr_textBox" HorizontalAlignment="Left" Height="80" Margin="234,129,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="290"/> 
    <Button Name="next_Button" Content="Next" HorizontalAlignment="Left" Height="21" Margin="355,229,0,0" VerticalAlignment="Top" Width="82" Click="next_Button_Click"/> 
    <Button Name="cancel_Button" Content="Cancel" HorizontalAlignment="Left" Height="21" Margin="442,229,0,0" VerticalAlignment="Top" Width="82" Click="cancel_Button_Click"/> 

    <Menu HorizontalAlignment="Left" Height="23" VerticalAlignment="Top" Width="545"> 
     <MenuItem Name="mni_Language" Header="_Language"> 
      <MenuItem Name="mni_LanguageSel" Header="_Select a language" Click="language_sel_Click" /> 
      <MenuItem Name="mni_LanguageTrad" Header="_Translate" Click="translate_Click" /> 
     </MenuItem> 
    </Menu > 

</Grid> 
</Window> 

我已经张贴只是有事情做与两个窗口的代码...

当此按钮,用户点击添加任务,窗口新任务被打开。

我正在寻找的是一种在任务管理器中隐藏“新任务”语音的方法,只保留“调度程序”,但两个窗口都打开。

+1

New_task_1的构造除了图片之外,您还应该复制并粘贴代码,以便我们更轻松地查看。 – juharr

+0

或者可能是https://*.com/questions/1387528/multiple-windows-but-also-multiple-items-on-the-task-bar。 – mjwills

+0

你不清楚你的界面是什么意思。可能是taskmgr-image中看到的任务,使正确的术语成为**任务**。 – HimBromBeere

我发现了这个问题。我已经忘了设置辅助窗口的所有者

在我已经添加了以下的scheduler.cs:

public partial class scheduler : Window 
{ 

    <other code> 

    public static Window main; 

    public scheduler() 
    { 

     <other code> 

     main = this; 

    } 

    <other code> 
} 

和我添加

this.Owner = scheduler.main;