フォームの親スレッドを変更する

フランク

WinFormのスレッドの親をGUIスレッドに戻す方法を見つけようとしています。現在、別のスレッドからフォームを作成する必要がありますが、それを参照しているメインフォームからアクセスできなくなります。

ここに私が持っているもののサンプル

public partial class MainForm : Form
{
    // local instance of the sub form
    private ViewForm SubForm { get; set;} = null;

    public MainForm()
    {
        InitializeComponent();

        Task.Run(() =>
        {
            // set the sub form             
            SubForm = new ViewForm();
        }

        // call the rest of the initialization of main form
        InitializeCustomControls();
    }

    private void OpenViewWindow_Click(object sender, EventArgs e)
    {
        // if the window is instanciated
        if (SubForm != null)
        {
            SubForm.Show();                
        }
    }        
}

ViewFormウィンドウではありませんFormオブジェクト。これはカスタムのサードパーティウィンドウです。テーマと混合された多くのコントロールとテンプレートがあります。新しい空のコンストラクターへの唯一の呼び出しには最大7秒かかる可能性があるため、メインウィンドウの読み込みを続行しながら、別のスレッドでコンストラクターを作成する必要があります。

現在.Show()、スレッド作成の制限のために常に失敗するものを除い、ウィンドウ内の任意のメソッドを呼び出すことができますスレッドを無限に実行するスレッドとして作成することは避けたいと思います。このスレッドは、ウィンドウを表示および非表示にするタイミングを指示するオブジェクトを待機して読み取ります。

これは.Show()エラーです:

Cross-thread operation not valid: Control 'ViewForm' accessed from a thread other than the thread it was created on.

代わりに次のことを試しましたが、それでもインターフェイスがフリーズします:

Task.Run(() =>
{
    // set the sub form   
    this.Invoke(new MethodInvoker(delegate
    {
        SubForm = new ViewForm();
    }));
}

私が欲しいのは、火のようなもので、GUIオブジェクトのインスタンス化を忘れます。

ジョシュパート

を使用したソリューションはBackGroundWorker次のとおりです。

public partial class MainForm : Form
{
    // local instance of the sub form
    private ViewForm SubForm { get; set;} = null;

    public MainForm()
    {
        InitializeComponent();
        backGroundWorker1.RunWorkerAsync();
        InitializeCustomControls();
    }

    private void OpenViewWindow_Click(object sender, EventArgs e)
    {
        // if the window is instanciated
        if (SubForm != null)
        {
            SubForm.Show();                
        }
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        SubForm = new ViewForm();
    }
}

MainFormサンプルのSubViewフォームとThreading.Sleep(10000)コンストラクターにが付いたフォームの2つのフォームの作成をテストしました

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

子スレッドから親フォームを閉じる

分類Dev

スレッドプールスレッドからフォームタイトルを変更できるのはなぜですか?

分類Dev

C# でスレッドを使用すると、フォームが親の中央で開かない

分類Dev

スプレッドシート上のGoogleScript-フォームを介して回答を変更するためのリンクを作成します

分類Dev

スレッドc#からフォームのプロパティを変更します

分類Dev

サイプレスでデフォルトのヘッドレスブラウザをクロームに変更する方法

分類Dev

VisualStudioチームサービスでデフォルトのスレッドカルチャを変更する方法はありますか

分類Dev

Laravelがフォーラムのスレッドを削除する

分類Dev

オブジェクトをペアレント化すると、その親のトランスフォームが変更されます

分類Dev

パスワードを変更するためのDjangoフォーム

分類Dev

Drupalコマースクレジットカードのデフォルト値を変更する方法

分類Dev

子フォームで親のフォームwebControlソースを変更するにはどうすればよいですか?

分類Dev

IOSXamarinフォームでスイッチの色を変更する

分類Dev

フォームボックスの高さと長さを変更する

分類Dev

最初にフォームの変更をリッスンする方法は?

分類Dev

アップロードパスの再生フレームワークを変更する

分類Dev

チェックボックス値の変更時にフォームフィールドオプションを変更する-Symfony5.1

分類Dev

データフレームインデックスの秒を変更する

分類Dev

親フォームのコードを変更せずに、子フォームから親フォームのクリックイベントを呼び出すwinform

分類Dev

Xamarinフォームのプレースホルダーのテキストの色を変更する方法

分類Dev

高度なカスタムフォームの順序を変更するにはどうすればよいですか?-ワードプレス

分類Dev

特定のフォームのフィールドエラースタイルのみを変更する

分類Dev

Playフレームワーク:Playのデフォルトパッケージを変更するには?

分類Dev

pandas-データフレームのフォーマットを変更する

分類Dev

データフレームの数値フォーマットを変更する

分類Dev

テキストフォームの下の境界線の色を変更する方法フィールドフラッター

分類Dev

マットフォームフィールドの境界線の色を変更する

分類Dev

NavigationBarXamarinフォームのアイコン位置を変更するカスタムレンダラー

分類Dev

メールの「差出人」アドレスを変更するために、特定の連絡フォームにphp $ headersを配置する場所

Related 関連記事

  1. 1

    子スレッドから親フォームを閉じる

  2. 2

    スレッドプールスレッドからフォームタイトルを変更できるのはなぜですか?

  3. 3

    C# でスレッドを使用すると、フォームが親の中央で開かない

  4. 4

    スプレッドシート上のGoogleScript-フォームを介して回答を変更するためのリンクを作成します

  5. 5

    スレッドc#からフォームのプロパティを変更します

  6. 6

    サイプレスでデフォルトのヘッドレスブラウザをクロームに変更する方法

  7. 7

    VisualStudioチームサービスでデフォルトのスレッドカルチャを変更する方法はありますか

  8. 8

    Laravelがフォーラムのスレッドを削除する

  9. 9

    オブジェクトをペアレント化すると、その親のトランスフォームが変更されます

  10. 10

    パスワードを変更するためのDjangoフォーム

  11. 11

    Drupalコマースクレジットカードのデフォルト値を変更する方法

  12. 12

    子フォームで親のフォームwebControlソースを変更するにはどうすればよいですか?

  13. 13

    IOSXamarinフォームでスイッチの色を変更する

  14. 14

    フォームボックスの高さと長さを変更する

  15. 15

    最初にフォームの変更をリッスンする方法は?

  16. 16

    アップロードパスの再生フレームワークを変更する

  17. 17

    チェックボックス値の変更時にフォームフィールドオプションを変更する-Symfony5.1

  18. 18

    データフレームインデックスの秒を変更する

  19. 19

    親フォームのコードを変更せずに、子フォームから親フォームのクリックイベントを呼び出すwinform

  20. 20

    Xamarinフォームのプレースホルダーのテキストの色を変更する方法

  21. 21

    高度なカスタムフォームの順序を変更するにはどうすればよいですか?-ワードプレス

  22. 22

    特定のフォームのフィールドエラースタイルのみを変更する

  23. 23

    Playフレームワーク:Playのデフォルトパッケージを変更するには?

  24. 24

    pandas-データフレームのフォーマットを変更する

  25. 25

    データフレームの数値フォーマットを変更する

  26. 26

    テキストフォームの下の境界線の色を変更する方法フィールドフラッター

  27. 27

    マットフォームフィールドの境界線の色を変更する

  28. 28

    NavigationBarXamarinフォームのアイコン位置を変更するカスタムレンダラー

  29. 29

    メールの「差出人」アドレスを変更するために、特定の連絡フォームにphp $ headersを配置する場所

ホットタグ

アーカイブ