すべてWinformでUIイベントを使用するとCurrentPrincipalが失敗しました。
WinFormアプリケーションでThread.CurrentPrincipalを設定しようとすると問題が発生しました。
フォームにButton1とButton2という2つのボタンがあります。 Button1はThread.CurrentPrincipalを設定し、Button2はCurrentPrincipalを表示します。これまでのところすべてがうまくいきます。
private void button1_Click(object sender, EventArgs e)
{
SetPermission();
}
private void SetPermission()
{
Thread.CurrentPrincipal = new MyPrinciple() { User = "xxxx" };
}
private void button2_Click(object sender, EventArgs e)
{
Console.WriteLine("Tread principal:{0},{1}", Thread.CurrentThread.Name, Thread.CurrentPrincipal.ToString());
}
次にコードを変更しました。 Form.Showでイベントを追加しました。
void Form1_Shown(object sender, EventArgs e)
{
Dispatcher.CurrentDispatcher.Invoke(new Action(() => { SetPermission(); }));
}
public Form1()
{
InitializeComponent();
this.Shown += Form1_Shown;
}
私がprincpalを表示するためにbutton2をクリックすると、私は何も見ませんでした。
フォームのコンストラクタにプリンシパルを設定しようとしました。それから私はbutton2をクリックしたときに結果が期待されます。
public Form1()
{
InitializeComponent();
//this.Shown += Form1_Shown;
SetPermission();
}
Googleで検索しましたが、今は分かりません。これら2つの方法の違いは何ですか?
ありがとうございました。
の
を使用しようと、あなたはDispatcher.CurrentDispatcher.Invoke(..)せずにSetPermissio()を呼び出してテストしましたか? – Wolfgang
はい、同じ結果です。原則を得ることができません。 –
何かエラーがありますか?それは?または、ハンドラまたはSetPermisiion()が実行されませんか?表示されたイベントは、フォームが表示された最初の1回のみディスパッチされます。 – Wolfgang