Обьединение потоков в WPF с помощью Dispatcher.
От: CoolZero  
Дата: 01.04.09 22:29
Оценка:
Всем доброго времени суток. Я здесь новенький, это моё первое сообщение, не судите строго, помощь очень нужна.

Дело состоит вот в чём, в своём WPF приложении в одном из обработчиков событий создаю обьект Timer, что из System.Threading, один из параметров которого делегат на вызываемый метод. Как написано в документации, этот метод запускается в отдельном потоке, сразу оговорюсь, это делается для описания модели полёта некоего снаряда. Мне нужно объединить эти потоки, для чего мне сказали использовать Dispatcher.BeginInvoke

И тут я столкнулся с проблемой, использую перегрузку Dispatcher.BeginInvoke(Delegate method, params object[] args),
в качестве первого параметра сперва подсказали использовать анонимный метод, не прошло, вылетает ошибка, что анонимный метод не является делегатом. Потом решил не мудрить и использовать просто делегат ссылающийся на некую функцию без возвращаемого значения(void), теперь при попытке указать делегату на эту функцию вылетает ошибка: "Неявное преобразование void в System.Delegate невозможно". Подскажите пожалуйста, в чём моя ошибка? С делегатами обращаться толком не умею, чтение документации не помогло прояснить картину, возможно ошибка именно в этом.



public partial class Window1 : Window
    {
         private delegate String _FlyModelMethodDelegate();
         private bool _fly;
         
         private void Page_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
         {
                  _fly = true
         }

         private void root_Loaded(object sender, RoutedEventArgs e)
        {
            TimerCallback TimerDelegate = ThreadSynch;
            _timer = new Timer(TimerDelegate, null, 10, 100);
            _FlyModelMethodDelegate = FlyBulletModelMethod(); // здесь возникает проблема, ругается на не возможность
        }                                                     //неявного преобразования void в System.Delegate
        
        
        private void ThreadSynch(object a)
        {
            if (_fly)
            {
                Dispatcher.BeginInvoke(_FlyModelMethodDelegate, null)
            }
        }




Гуглил, читал документацию, поиск юзал.
P.S. MSDN читаю, но пока воспринимаю плохо, надеюсь на вашу помощь.
Re: Обьединение потоков в WPF с помощью Dispatcher.
От: TK Лес кывт.рф
Дата: 02.04.09 19:25
Оценка:
Здравствуйте, CoolZero, Вы писали:

CZ>И тут я столкнулся с проблемой, использую перегрузку Dispatcher.BeginInvoke(Delegate method, params object[] args),

CZ>в качестве первого параметра сперва подсказали использовать анонимный метод, не прошло, вылетает ошибка, что анонимный метод не является делегатом. Потом решил не мудрить и использовать просто делегат ссылающийся на некую функцию без возвращаемого значения(void), теперь при попытке указать делегату на эту функцию вылетает ошибка: "Неявное преобразование void в System.Delegate невозможно". Подскажите пожалуйста, в чём моя ошибка? С делегатами обращаться толком не умею, чтение документации не помогло прояснить картину, возможно ошибка именно в этом.

Вот здесь: _FlyModelMethodDelegate = FlyBulletModelMethod(); надо писать просто _FlyModelMethodDelegate = FlyBulletModelMethod;
В остальном, что-бы получить экземпляр Delegate его надо создать. в случае когда используется выражение типа _FlyModelMethodDelegate = FlyBulletModelMethod; компилятор знает делегат какого типа от него требуется. В случае же Delegate d = FlyBulletModelMethod; это этот тип вывести не может.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.