-1

私はマルチスレッドが初めてです。私はwpfを使用してプロジェクトを行っています。

私のプロジェクトの簡単な紹介:

  1. 1 つのメインウィンドウ
  2. mainwindow の 1 つのメソッドは、window 2 と呼ばれる別のウィンドウを作成する別のスレッドを作成します。
  3. ウィンドウ2が表示されるたびに、メインウィンドウが中断されます(join()メインスレッドを中断する方法を使用しました)

問題は、ウィンドウ 2 を閉じるたびに、新しいスレッドが終了しないことです。そのため、メインスレッドは永久に中断されます。では、この問題を解決する方法。

次のコードは、MainWindow クラスでウィンドウ 2 の新しいスレッドを作成する場所です。

private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        Thread addThread = new Thread(CreateCourseWindow);
        addThread.SetApartmentState(ApartmentState.STA);
        addThread.Start();
        Thread.Sleep(TimeSpan.FromSeconds(1));
        addThread.Join();
        if (addcourse.Saved) CreateCourseButton(myCourses.Count(), myCourses.Last());
    }

次のコードは、新しいスレッドのエントリ関数です。

private void CreateCourseWindow()
    {
        addcourse = new AddCourse();
        addcourse.Activate();
        addcourse.Show();
        addcourse.Topmost = true;
        System.Windows.Threading.Dispatcher.Run();
    }

次のコードは、スレッドを終了したい場所です

private void Button_Click_2(object sender, RoutedEventArgs e)
    {
        this.Close();
    }

AddCourse はウィンドウ 2 クラスです。

4

2 に答える 2