2015-05-21 6 views
1

Я медленно начинаю использовать Lightswitch для некоторых небольших программных проектов, которые у нас есть, но я столкнулся с проблемой, что я просмотрел несколько сообщений и журналов и пока не найти решение в это время. Любая помощь здесь будет оценена по достоинству.Lightswitch C# MessageBoxResult Error (UnautherizedAccessException: Invalid Cross-Thread Access)

В примечании; Я использую Visual Studio 2013 Ultimate.

Ошибка у меня есть UnauthorizedAccessException was unhandled by user code.

Сегмент кода, с которым я столкнулся, вставлен чуть ниже, этот сегмент также вызывается пользователем, нажимая на кнопку. Это должно использоваться, чтобы поймать выбор пользователя «Ок» или «Отмена» и выполнить отдельное действие по выбору пользователя.

public void Restart_Prompt() 
{ 
    MessageBoxResult result = MessageBox.Show("Yippy", "Hello", MessageBoxButton.OKCancel); 

    if (result == MessageBoxResult.OK) 
    { 
     MessageBox.Show("Selected option was Ok"); 
    } 
    else 
    { 
     MessageBox.Show("Selected option was Cancel..."); 
    } 
} 

Опять же, любые указатели или помощь по этому вопросу будут оценены.

Вот деталь текст ошибки, если кому-то интересно:

{System.UnauthorizedAccessException: Invalid cross-thread access. 
    at MS.Internal.XcpImports.CheckThread() 
    at MS.Internal.XcpImports.MessageBox_ShowCore(Window window, String messageBoxText, String caption, UInt32 type) 
    at System.Windows.MessageBox.ShowCore(Window window, String messageBoxText, String caption, MessageBoxButton button) 
    at System.Windows.MessageBox.Show(String messageBoxText, String caption, MessageBoxButton button) 
    at LightSwitchApplication.INVENTORiesListDetail.Restart_Prompt() 
    at LightSwitchApplication.INVENTORiesListDetail.Restart_ASI_Execute() 
    at LightSwitchApplication.INVENTORiesListDetail.DetailsClass.MethodSetProperties._Restart_ASI_InvokeMethod(DetailsClass d, ReadOnlyCollection`1 args) 
    at Microsoft.LightSwitch.Details.Framework.Internal.BusinessMethodImplementation`2.<TryInvokeMethod>b__5() 
    at Microsoft.LightSwitch.Utilities.Internal.UserCodeHelper.CallUserCode(Type sourceType, String methodName, String instance, String operation, ILoggingContext context, Action action, String additionalText, Func`1 getCompletedMessage, Boolean tryHandleException, Boolean swallowException, Exception& exception)} 

ответ

1

В .Net - WPF и WinForms - пользовательский интерфейс является поточно аффинным. Другими словами, все взаимодействие с пользовательским интерфейсом должно происходить в потоке пользовательского интерфейса. В WPF это достигается с помощью типа Dispatcher и в WinForms через метод Invoke для каждого элемента управления. Ваш метод вызывается из фонового потока, поэтому вам необходимо маршализовать вызов в потоке пользовательского интерфейса, чтобы предотвратить ошибку. В переключателе освещения я думаю: Это:

Dispatchers.Main.BeginInvoke(()=> 
{ 
    // message box method call here 
}); 
+0

Добавить инструкцию using 'using Microsoft.LightSwitch.Threading', и ваше решение работает для меня ... Спасибо за указатель там. – DAS03590