2012-03-16 3 views
2

Я преобразования VB код формы, который использует InvokeRequired для C# WPFПочему логическое значение InvokeRequired и Dispatcher.CheckAccess инвертировано?

// VB 
If Me.InvokeRequired Then 
    MessageBox.Show("Apple") 
Else 
    MessageBox.Show("Orange") 
End If 

В VB код возвращает "Apple,"

// C# 
if (this.Dispatcher.CheckAccess()) 
{ 
    MessageBox.Show("Apple"); 
} 
else 
{ 
    MessageBox.Show("Orange"); 
} 

Но мой C# код возврата "Orange"

Не является ли C12 CheckAccess таким же, как у VB Formc's InvokeRequired? Почему логическое значение перевернуто?

+1

Парень WPF не разговаривал с парнем Winforms. –

ответ

4

Dispatcher.CheckAccess() проверяет, связаны ли вы с нитью, в нашем случае это неверно.

InvokeRequired проверяет, не связано ли вы с нитью, в нашем случае это правда.

Вам необходимо вызвать (InvokeRequired == true), если вы не связаны с конкретным потоком. Другими словами, логическое определение Invoke требуемого будет:

InvokeRequired = !Dispatcher.CheckAccess() 

Invoke требуется, если у вас нет доступа к конкретной теме

+0

Не ответили ли на этот вопрос или я его неправильно истолковал? – maka

1

Я предполагаю, что это говорит, что InvokeRequired означает, что вам нужно ссылаться на GUI потоке, тогда CheckAccess является проверка, имеет ли текущий поток доступ к графическому пользовательскому интерфейсу и возвратит true, если у них есть доступ.

Кажется немного запутанным, чтобы изменить именование таким образом.

NB. C# имеет свойство InvokeRequired для Windows.Forms

+0

CheckAccess является ложным, когда поток не может получить доступ к основному потоку пользовательского интерфейса, а InvokeRequired имеет значение true, когда поток не может получить доступ к основному потоку пользовательского интерфейса и нужно вызвать Invoke? Итак, логическое значение CheckAccess и InvokeRequired действительно противоположно? MSDN действительно запутывает меня. – KMC

+0

это WPF, я конвертирую в ... – KMC

+0

Ну, вы всегда можете создать свойство под названием 'InvokeRequired', которое вызвало функцию' CheckAccess() 'и инвертировало результат !? – Nick

Смежные вопросы