Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2017, 16:33   #1
Wing13
Новичок
Джуниор
 
Регистрация: 19.05.2017
Сообщений: 9
По умолчанию Многопоточность в Windows Universal

Всем привет!
Пытаюсь через многопоточность реализовать на платформе Windows Universal запуск рекламы при соблюдении условий переменных.

Сейчас код такой:

Код:

        public MainPage() {

            Task task1 = new Task(() => {Update();});
            task1.Start();

            AdvInit();
        }

static void Update ()
        {
            for (;;) {
                Task.Delay(500);
                if (AdStatus == 1 && AdRandom.AdShown == 1) {AdShowEvent?.Invoke(null, EventArgs.Empty);}} //Вызов события рекламы
        }

     void AdvInit ()
        {
           AdShowEvent += ShowAdNow;
           myInterstitialAd = new InterstitialAd(); //Инициализация рекламы
           //И другие события
        }

        void ShowAdNow (object sender, object e) {
           myInterstitialAd.Show(); //Вызов рекламы
        }
Суть такова что из Task при соблюдении условий вызывается событие ShowAdNow. Компилится нормально, но не работает.
Событие ShowAdNow вызывается, но при вызове содержимого функции ShowAdNow происходит исключение, в дебаге такое:

Значение локальной переменной или аргумента "<this>" в данный момент получить невозможно.

Невозможно получить значение локальной переменной или аргумента "sender", поскольку оно недоступно в данной точке выполнения, возможно, оно отброшено при оптимизации.

Невозможно получить значение локальной переменной или аргумента "e", поскольку оно недоступно в данной точке выполнения, возможно, оно отброшено при оптимизации. object


Если вызвать myInterstitialAd.Show(); просто из основного потока, все работает нормально.

Что делать что бы myInterstitialAd.Show(); вызывался из Task?
Wing13 вне форума Ответить с цитированием
Старый 21.05.2017, 16:45   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А зачем static?
И Task.Delay вроде не так работает, как вы думаете. Это не Thread.Sleep.

Вообще тут не нужны потоки, предлагали ж уже просто set'еры свойств использовать.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 21.05.2017 в 16:48.
Alex11223 вне форума Ответить с цитированием
Старый 21.05.2017, 16:48   #3
Wing13
Новичок
Джуниор
 
Регистрация: 19.05.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А зачем static?
Шаманство :/ Что с ним что без разницы нет.

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
предлагали ж уже просто set'еры свойств использовать.
Пробовал, не работает. Ну, и многопоточность мне в целом понятнее.
Wing13 вне форума Ответить с цитированием
Старый 21.05.2017, 16:50   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Почему не работает?

Что может быть понятнее? Это ж по сути просто функция setMyProperty(value), в которой вы изменяете значение переменной и делаете что угодно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.05.2017, 16:53   #5
Wing13
Новичок
Джуниор
 
Регистрация: 19.05.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
в которой вы изменяете значение переменной и делаете что угодно.
Я не изменяю значение переменной, оно само изменяется внутри игры.
Игра работает отдельно, эта xaml надстройка отдельно. Вызывать из игры переменные или функции в MainPage не получается потому что для игры ее не существует (она создается после компиляции игры).
Я читал что можно как-то через делегаты но не понял ничего.
Wing13 вне форума Ответить с цитированием
Старый 21.05.2017, 16:57   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну тогда можно хотя бы таймер (DispatcherTimer) вместо этого.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.05.2017, 00:53   #7
Wing13
Новичок
Джуниор
 
Регистрация: 19.05.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну тогда можно хотя бы таймер (DispatcherTimer) вместо этого.
О, спасибо тебе, добрый человек, DispatcherTimer работает и все делает идеально!
Wing13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Universal File Editor AndyD Софт 6 19.08.2013 01:34
Joomla 2.5 - Ошибка с Universal AJAX Live Search после переноса сайта на новый хостинг new player WordPress и другие CMS 0 19.02.2013 14:04
С++ многопоточность kineziz Общие вопросы C/C++ 3 11.09.2012 13:20
Многопоточность Neymexa Помощь студентам 3 13.04.2010 11:43
Universal Trainer Shurik Hacker Софт 3 20.06.2007 13:17