Отговори на тема  [ 3 мнения ] 
Mалко помощ за VS - C# 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение Mалко помощ за VS - C#
От скоро се занимавам и имам нужда от малко помощ.
Става въпрос за следното:
Стартирам форма, която е интерфейса на приложението.
Създавам инстанция на клас и в класа има събитие, което чрез делегат връща изпълнението в метод, който е дефиниран в класа на формата.
Когато делегата върне процеса в метода на формата и се опитам да обновя данните в определена контрола с резултата подаден от обекта на този клас се генерира изключение със съобщение - "... кръстосани нишки".
В смисъл не позволява да се обнови контролата, защото "нишката която се опитва да я манипулира е различна от тази която я е създала".
Доколкото разбирам този проблем се решава, чрез метода Invoke.
Може ли някой принципно да обясни каква е концепцията на подхода чрез този метод.
Предварително се извинявам, ако темата не е подходяща за този форум.


Сря Авг 24, 2011 7:28 pm
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 11, 2006 8:19 pm
Мнения: 373
Местоположение: София/Edinburgh, UK
Мнение Re: Mалко помощ за VS - C#
Ами да с Invoke се прави. Ето един пример:
Код:
public delegate void ChangeStatusDelegate(string status);
public void ChangeStatus(string status)

    {

        try

        {

            if (InvokeRequired)

            {

                BeginInvoke(new ChangeStatusDelegate(ChangeStatus), new object[] { status });

                return;

            }

            //Слагаш тук кода за обновявяне. Например:
            this.ForeColor = Colors.Black;

            Invalidate();

        }

        catch (Exception ex)

        {

     
        }

    }


Този код е от контрола, която съм писал, която наследява класа Control, който пък поддържа полето InvokeRequired. Надявам се това да е достатъчно като код :)

Идеята на кода е следната. Някое събитие ти вика твоята функция, тя се намира върху нишка, различна от тази на главната форма. Проверява се InvokeRequired (тоест дали нишките съвпадат). Ако са различни нишките, тогава се вика BeginInvoke, което казано на прост език кара нишката, в която е създадена контролата, да извика същата функция. При новото извикване InvokeRequired e false и съответно се изпълнява кода нататък.

_________________
Българският портал за РОБОТИКА


Чет Авг 25, 2011 10:04 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение Re: Mалко помощ за VS - C#
Ахааа, благодаря!
:idea: ми най - после ...

Още веднъж благодаря, кода вече е изпробван успешно.


Чет Авг 25, 2011 10:06 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 3 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни