ВсеУстановите CurrentPrincipal сбой при использовании события UI В Winform
я встретил вопрос, когда я пытаюсь установить Thread.CurrentPrincipal на WinForm применения.
На Форме, Button1 и Button2 есть две кнопки. 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.Shown.
void Form1_Shown(object sender, EventArgs e)
{
Dispatcher.CurrentDispatcher.Invoke(new Action(() => { SetPermission(); }));
}
public Form1()
{
InitializeComponent();
this.Shown += Form1_Shown;
}
Когда я нажимаю кнопку2, чтобы показать принца, я ничего не видел.
Я попытался установить принципал в конструкторе формы. Затем я получил ожидаемый результат, когда я нажал кнопку2.
public Form1()
{
InitializeComponent();
//this.Shown += Form1_Shown;
SetPermission();
}
Я искал в Google. К настоящему моменту я понятия не имею об этом. В чем разница между этими двумя способами?
Спасибо вам большое.
вы испытать вызывать SetPermissio() без Dispatcher.CurrentDispatcher.Invoke (..)? – Wolfgang
Да, тот же результат. Не могу получить Принцип. –
Хм .. есть ли ошибка? который? Или не выполняется выполнение обработчика или SetPermisiion()? PLease сообщит, что событие Shown отправляется только один раз - первый раз, когда отображается форма. – Wolfgang