アプリが起動すると、静的変数を作成してWindowsフォームオブジェクトへの参照を保存します。 実際にメインからスレッドを開始する場合は、スレッドとしてフォームオブジェクト参照をパラメータとして渡すこともできます。
EDIT:実際には、スレッドを作成した後にオブジェクトにアクセスする必要がある場合にのみ、静的な操作が必要です。それ以外の場合は、ほぼすべての場合にフォーム参照をパラメータとして渡すことができます。
すなわち
internal static System.Windows.Form mainForm;
public static void Main(string[] args)
{
mainForm = new NotifyIconApplication();
//start thread here.
Application.Run(mainForm);
}
あなたのスレッドは、今、あなたのMainFormへの参照にアクセスすることができます。
これで、そのオブジェクトのメソッドを呼び出すことができましたが、ここからフォームを実行するにはフォームスレッドでメソッドを呼び出す必要があります。
internal void MyMethod(object params)
{
if(this.InvokeRequired)
{
//This causes your hook creation to run on the forms thread
this.Invoke(DelegateToMyMethod, params);
}
else
{
//Create hook.
}
}
私はすでにこの比較研究を行っていますが、私はそれに関する私のテストに基づいています。 私のアプリにはUIコントロールがありません。メインスレッドでメソッドを実行するだけで、フックが作成されます。 Luiz Borges –