WPF ThreadableObservable Collection

Did you every get an InvalidOperationException when binding to a collection in wpf…. The reason for this is that databinding is supported only when the collection is being filled by the dispatcher thread……

Unforunatly the WPF ObservaleCollection<T> does not support cross thread operations, so ther is only one thing to do … Implement one !!!! Bea Costa, the WPF queen explains this in more detail that I am, you can have a look at this post here.

Basically this class is just like the observable collection yet it asks the Dispatcher object to send the Event notification of the Collection Changed.

here we go

using System;
using System.Collections.Generic;
using System.Text;

using System.Windows.Threading;
using System.ComponentModel;

namespace Presentation.Avalon.GuiCore
{
/// <summary>
/// ThreadableObservableCollection caters for notify the user interface with changes done in the collection (Item[])
/// This can be used when you have a multi threaded envirorment
/// </summary>
/// <typeparam name=”T”>The Type of objects that are going to be stored in this collection</typeparam>
public class ThreadableObservableCollection<T> :
System.Collections.ObjectModel.ObservableCollection<T>, INotifyPropertyChanged
{
private List<T> items = null;

/// <summary>
/// Returns the index of the item
/// </summary>
/// <param name=”item”>The item to find</param>
/// <returns>The index of the item found</returns>
public int BinarySearch(T item)
{
if(this.comparer == null)
return -1;

return this.items.BinarySearch(item, this.comparer);
}

private IComparer<T> comparer;

/// <summary>
/// Comparer used to sort the collection
/// </summary>
public IComparer<T> Comparer
{
get { return comparer; }
set { comparer = value; }
}

//Gets the syncronization object to lock
private object sync = null;

/// <summary>
/// Gets the syncronization object to lock
/// </summary>
public object SyncRoot
{
get
{
return sync;
}
}

private T defaultLastValue;

/// <summary>
/// Gets the last value of the collection
/// </summary>
public T LastValue
{
get
{
if (this.items.Count != 0)
return this.items[this.Count > 0 ? (this.Count – 1) : 0];
else
return defaultLastValue;
}
}

/// <summary>
/// controlDispatcher stored the dispatcher of the GUI control being daat bound
/// </summary>
private readonly Dispatcher controlDispatcher;

/// <summary>
/// ControlDispatcher returns the dispatcher of the GUI control being daat bound
/// </summary>
public Dispatcher ControlDispatcher
{
get {return controlDispatcher; }
}

/// <summary>
/// Full constructor
/// Sets the dispatcher for this view
/// </summary>
/// <param name=”controlDispatcher”>The dispatcher of the control being data bound</param>
/// <param name=”comparer”>Comparer to sort the collection</param>
/// <param name=”defaultValue”>The value to return from the LastValue property, if no data is present in the collection</param>
public ThreadableObservableCollection(Dispatcher controlDispatcher, IComparer<T> comparer, T defaultValue)
: this(controlDispatcher, comparer)
{
this.defaultLastValue = defaultValue;
}

/// <summary>
/// Full constructor
/// Sets the dispatcher for this view
/// </summary>
/// <param name=”controlDispatcher”>The dispatcher of the control being data bound</param>
/// <param name=”comparer”>Comparer to sort the collection</param>
public ThreadableObservableCollection(Dispatcher controlDispatcher, IComparer<T> comparer)
{
this.controlDispatcher = controlDispatcher;
this.comparer = comparer;
sync = new object();
this.items = this.Items as List<T>;
}

/// <summary>
/// Default constructor
/// Sets the dispatcher for this view
/// </summary>
/// <param name=”controlDispatcher”>The dispatcher of the control being data bound</param>
public ThreadableObservableCollection(Dispatcher controlDispatcher)
: this(controlDispatcher, null)
{}

//flag to signal if the collecion is being added with a chunk of data
bool busy = false;

/// <summary>
/// flag to signal if the collecion is being added with a chunk of data
/// </summary>
public bool Busy
{
get { return busy; }
}

/// <summary>
/// Add a collection to the list
/// </summary>
/// <param name=”items”>The collection of objects to add</param>
public void AddRange(IList<T> items)
{
this.AddRange(items, true);
}

/// <summary>
/// Add a collection to the list
/// </summary>
/// <param name=”items”>The collection of objects to add</param>
/// <param name=”resetAction”>Pass true to raise the collection action reset event argument</param>
public void AddRange(IList<T> items, bool resetAction)
{
//if only one item needs to be added call the add directly
if (items.Count == 1)
{
this.Add(items[0]);
return;
}

//set the collection as busy to turn OFF notifications
busy = true;

lock (sync) //lock here since the data is being added
{
//add all the values in the collection
foreach (T value in items)
this.Items.Insert(GetIndexForItem(value), value);
}

//set the collection as not busy to turn ON notifications
busy = false;

if (resetAction)
{
//raise the collection changed event
this.OnCollectionChanged(
new System.Collections.Specialized.NotifyCollectionChangedEventArgs(
System.Collections.Specialized.NotifyCollectionChangedAction.Reset)
);
}
else
{
this.OnCollectionChanged(
new System.Collections.Specialized.NotifyCollectionChangedEventArgs(
System.Collections.Specialized.NotifyCollectionChangedAction.Add,
(System.Collections.IList)items));
}
}

/// <summary>
/// Removes a range of items from the list
/// </summary>
/// <param name=”indexFrom”>The index from where to begin removing</param>
/// <param name=”indexTo”>The index from where to end removing</param>
/// <param name=”notifyUIOnce”>Set to true if you want to only send one event to the UI when finished removing items</param>
public void RemoveRange(int indexFrom, int indexTo, bool notifyUIOnce)
{
if (!notifyUIOnce)
{
RemoveRange(indexFrom, indexTo, this);
return;
}

//set the collection as busy to turn OFF notifications
busy = true;

RemoveRange(indexFrom, indexTo, this.items);

//set the collection as not busy to turn ON notifications
busy = false;

//raise the collection changed event
this.OnCollectionChanged(
new System.Collections.Specialized.NotifyCollectionChangedEventArgs(
System.Collections.Specialized.NotifyCollectionChangedAction.Reset)
);
}

/// <summary>
/// Removes a range of items from the list
/// </summary>
/// <param name=”indexFrom”>The index from where to begin removing</param>
/// <param name=”indexTo”>The index from where to end removing</param>
/// <param name=”collection”>The collection to remove items from</param>
private static void RemoveRange(int indexFrom, int indexTo, IList<T> collection)
{
for (int i = 0; i <= indexTo – indexFrom; i++)
{
if (collection.Count != 0)
{
collection.RemoveAt(indexFrom);
}
}
}

/// <summary>
/// raises the collection changed method
/// </summary>
/// <param name=”e”>The event argument to pass in the event</param>
protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (!busy)
{
if (InvokeRequired)
{
controlDispatcher.BeginInvoke(DispatcherPriority.Send, new OnCollectionChangedEventHandler(OnCollectionChanged), e);
}
else
{
base.OnCollectionChanged(e);
base.OnPropertyChanged(new PropertyChangedEventArgs(“LastValue”));
}
}
}

#region Delegates for callbacks

/// <summary>
/// InvokeRequired check if there need current thread is the main thread
/// </summary>
/// <returns>Returns true if the current thread is not the main thread</returns>
private bool InvokeRequired
{
get
{
return controlDispatcher != null && controlDispatcher.Thread != System.Threading.Thread.CurrentThread;
}
}

/// <summary>
/// SetItemCallback is the delegate for when the SetItem method of the collection is invoked
/// </summary>
/// <param name=”index”>The index of the item</param>
/// <param name=”item”>The new item data to set</param>
private delegate void SetItemCallback(int index, T item);

/// <summary>
/// delegate to redirect to the correct thread
/// </summary>
/// <param name=”e”>The event argument to pass in when the event is raised</param>
private delegate void OnCollectionChangedEventHandler(System.Collections.Specialized.NotifyCollectionChangedEventArgs e);

/// <summary>
/// RemoveItemCallback is the delegate for when an item is removed from the Collection
/// </summary>
/// <param name=”index”>The index of the item to remove</param>
private delegate void RemoveItemCallback(int index);

/// <summary>
/// ClearItemsCallback is the delegate for when the clear method of the collection is called
/// </summary>
private delegate void ClearItemsCallback();

/// <summary>
/// InsertItemCallback is the delegate for when the InsertItem methdo of the collection is called
/// </summary>
/// <param name=”index”>The index where to insert the new item</param>
/// <param name=”item”>The new item to add</param>
private delegate void InsertItemCallback(int index, T item);

#endregion

#region Method To override

/// <summary>
/// InsertItem overrides the base InsertItem so to notify the GUI with the new data
/// </summary>
/// <param name=”index”>The index where the item was added</param>
/// <param name=”item”>The item object added</param>
protected override void InsertItem(int index, T item)
{
if (InvokeRequired)
controlDispatcher.Invoke(DispatcherPriority.Send, new InsertItemCallback(InsertItem), index, new object[] { item });
else
base.InsertItem(GetIndexForItem(item), item);
}

/// <summary>
/// Gets the index of where to insert the item in the list.
/// </summary>
/// <param name=”item”>The Item to search</param>
/// <returns>Return the index of the item</returns>
public int GetIndexForItem(T item)
{
if (this.items.Count == 0)
return 0;

//Compare with the last item.
if (this.comparer == null ||
Comparer.Compare(this.items[this.items.Count – 1], item) <= 0)
return this.items.Count;

int index = this.items.BinarySearch(item, this.comparer);

// Item was found. Insert new item after
if (index >= 0)
index++;

// Item was not found. Bitwise complement is where to put the new one.
if (index < 0)
index = ~index;

return index;
}

/// <summary>
/// SetItem modifies an item in the collection
/// </summary>
/// <param name=”index”>The index of the item to modify</param>
/// <param name=”item”>The new item instance</param>
protected override void SetItem(int index, T item)
{
if (InvokeRequired)
controlDispatcher.Invoke(DispatcherPriority.Send, new SetItemCallback(SetItem), index, new object[] { item });
else
base.SetItem(index, item);
}

/// <summary>
/// RemoveItem removes an item from a specific position
/// </summary>
/// <param name=”index”>The index of the item to remove</param>
protected override void RemoveItem(int index)
{
if (InvokeRequired)
controlDispatcher.Invoke(DispatcherPriority.Send, new RemoveItemCallback(RemoveItem), index);
else
base.RemoveItem(index);
}

/// <summary>
/// ClearItems will remove all the items from the collection
/// </summary>
protected override void ClearItems()
{
if (InvokeRequired)
ControlDispatcher.Invoke(DispatcherPriority.Send, new ClearItemsCallback(ClearItems));
else
base.ClearItems();
}

#endregion

#region UNIT_TEST
/// <summary>
/// Calls the InsertItem method to expose it for unit tests
/// </summary>
/// <param name=”index”>The index where the item was added</param>
/// <param name=”item”>The item object added</param>
public void InsertItemPublic(int index, T item)
{
this.InsertItem(index, item);
}

/// <summary>
/// Calls the SetItem method to expose it for unit tests
/// </summary>
/// <param name=”index”>The index of the item to modify</param>
/// <param name=”item”>The new item instance</param>
public void SetItemPublic(int index, T item)
{
this.SetItem(index, item);
}

/// <summary>
/// Calls the RemoveItem method to expose it for unit tests
/// </summary>
/// <param name=”index”>The index of the item to remove</param>
public void RemoveItemPublic(int index)
{
this.RemoveItem(index);
}

/// <summary>
/// Calls the ClearItems method to expose it for unit tests
/// </summary>
public void ClearItemsPublic()
{
this.ClearItems();
}
#endregion

}
}

73 thoughts on “WPF ThreadableObservable Collection

  1. Hi. I repeatedly be familiar with this forum. This is the oldest period unequivocal to ask a topic.
    How multifarious in this forum are references progressive behind, knavish users?
    Can I depute all the advice that there is?

  2. Often it becomes really difficult for single parents to get into a date or to find a date
    when they have so much responsibility and also not much time. Luckily internet can be
    a very good resource for parents to get a date using online dating agencies.

    If you are looking to get into a relationship then this is a good place to start.

    The best thing is once you get a adultfriendfinder membership then you can
    can automatically get all memberships of other sites that are offered by adult friend finder.
    These are all dating websites, best thing is you can get points by getting all memberships
    and then redeem those points to get a gold membership absolutely free.

    Click the link Dating Agencies For Parents to read how you can get a gold membership for any of the dating
    sites that adult friend finder offers. Just use the points to get gold membership of
    any website you want.
    Enjoy!

  3. Hi

    I just wanted to make a statement on the contribution of this community here. It’s amazing.

    I wanted to contribute a little myself

    There is a site that has been awfully helpful to myself and some associates of mine. That site is OnlineComputerHelpers.com and they offer online help computer repair

    I hope that my input has been substantial and you also are able to use their services just as I have.

  4. What’s up, is there anybody else here?
    If there are any real people here looking to network, leave me a post.
    Oh, and yes I’m a real person LOL.

    See ya,

  5. Hey there everyone i know you’ve all probably heard this already but check out google for all the scandal thats been going around about her lately
    Basically she made a sex tape for her boyfriend way back in HIGH SCHOOL who still had the tape and either sold it or released it. TMZ.com claims to have the tape but “decided not to release it” probably because she was underage and in high school at the time?

    But either way what do you guys think about this? I really dont think she deserves to loose her title over it as we are all kids at one time. Here is a quote from Donald trump when a miss america CANIDATE had photos of her released being drunk and slutty.

    “The pictures were disgusting,” Miss USA co-owner Donald Trump told Larry King on CNN Thursday night. “These pictures were pretty far out there and that is not representative of Miss USA. We had no choice but to terminate her.”

    Well its time to see what happens when the real tape hits the net. I know that there are some photos circulating like this one http://www.thehollywoodgossip.com/gallery/carrie-prejean-nude/ but i finally found the tape! Aparently some hacker found and released it so if you want to be one of the first to see it check out this link to watch it! http://tinyurl.com/ye95zu7

  6. hello I’m John. Sorry for this post. I just wonder to know where can I find video directory with London Escorts Video Directory. Mean escorts in Midlans with video profiles.
    I found just one escort in England with video profile is Escort-video.com but there is just a fewLondon gay video escort
    Also I found there London Adult boards.
    If administration are not mind lets discuss in this topic about London Escorts Video Directorys
    Thanks

  7. Sexy amateur fuck, blowjob and cum swallow.
    Old gentleman’s gentleman fucked a stinko girl. I fucked his sister.
    I often wanted to fuck my neighbours MOM.
    My GFs sister fucks greater than GF is.
    Lecturer wanked my cock in guise of class.

  8. Hi, i am new to this site. i am a single mom of 21 with a 17 month old baby girl. the father has never been
    in her life. he pays a small amount of child support and that’s about it. i live w/my parents. my mom helps
    out a lot but she complains about it almost nonstop. she makes me feel like a failure sometimes.
    my cousin is going to get engaged soon and i feel like that should be me, i’m kind of jealous.

    the last 2 years of my life have been hell and i can’t see it getting better anytime soon. i don’t have
    a job and i don’t drive. if anyone could provide any advice or support that would be great. if you can’t tell
    i feel like i have no one to talk to about this.

    My attempt at making money for a single mom and daughter

  9. Солнцезащитные очки и спортивные очки из Италии для лыжников , сноубордистов и просто модников . Оптовые поставки дистрибьютора солнцезащитных и спортивных очков. Советы по выбору продукции http://www.opticm.orc.ru
    Померить можно по адресу:
    г. Москва, м. Комсомольская, Комсомольская пл., д. 6, Универмаг «Московский», 1 этаж, магазин «Империя спорта»

  10. Hi guys,
    Nice forum and glad to be here.

    Cheers,
    Dezmont
    —————————————————————————————-
    If you do not know what to do with the ball in the 11 yard box – SCORE

  11. Hope you are having a good time,

    While searching a solution for shopping in USA being in Swetzerland I have come across the following company USAMailForward.com
    The first box I received from them was well packed and in good order! They have the best support team – they called me when they had some questions about packing the goods and shipped the packages as I wanted!
    I’m sorry if you treat this like an advert but I just wanted to help you as the people on the forum seem to have the same problem as me

    Thanks!

  12. [url=http://blog.3d-forex.ru/foreks-ekspert.html]форекс эксперт[/url] [url=http://videoman.abc-portal.ru/orgasm/skachat-porno-mama-synom.html]скачать порно мама сыном[/url] [url=http://pornofilms.abc-portal.ru/aziat/pornuha-roliki-seks.html]порнуха ролики секс[/url]

  13. Сдаются комнаты в Адлере. Комнаты в частном доме со всеми удобствами.Район курортного городка, где находятся: аквапарк, дедьфинарий, океанариум, кафе, рестораны. До моря 15 минут ходьбы. Стоимость проживания 200-250 рублей. Звонить по тел: 89184412291. Тамара.

  14. Продаю готовые курсовые и дипломные работы. БеЗплатно для пользователей – библиотека, в которой есть пособия по теории трезвости. Книга Зиновьева “Как избавиться от табака и алкоголя” (http://mir-studenta.ru/content/view/3256/92/) знакомит читателя с лучшим в мире методом избавления от вредных привычек.

  15. GamesWooW.com it`s a new website of dress up games who wants to offer you best online games that are on the internet . We will update our database with girl games in every day and we hope to have many online games what you really need. On GamesWooW.com you can play online dress up games and cooking games every time because we don`t charge any fee. Have fun , and remember , gamesWooW.com your girl games online source who add new games daily.

  16. Каждому Привет! Доходный авто-бизнес с ультрасовременными технологиями. Клиентам не будет отбоя. Строим для Вас бизнес в любой местности. Мы обо всем позаботимся.Цена 2 800 000 руб.(прибыль на 12-й месяц более 700 000руб. Подробности вышлю по е-майлу. Пишите: Godiac77@gmail.com

  17. Привет всем!
    Вот поделюсь с вами такой фишкой. Нашел в сети сайт на котором платят деньги за ответы.
    Т.е. дается заполнение анкеты и выбираешь опросы. отвечаешьи получаешь свои денюжки.
    Я прошел 5 опросов и получиили 150р . пол часа потратил. зато есть уже на пивасик.
    вот ссылка для регистрации ТЫК

    или electroshopbook.ru

  18. ООО ТД “АрмАльянс”, является официальным поставщиком трубопроводной арматуры специального и общепромышленного назначения (запорная арматура, задвижки, клапаны регулирующие, клапаны дроссельные, клапаны предохранительные, клапаны питательные, клапаны отсечные, клапаны обратные, шаровые краны и др.) из наличия и под заказ для энергообъектов (ТЭС, котлов, трубопроводов), нефтегазопроводов и других промышленных объектов.
    ООО ТД “АрмАльянс” занимается поставкой трубопроводной арматуры, запчастей (ЧЗЭМ) и электроприводов от заводов-изготовителей:
    – ОАО “Тяжпромарматура” г.Алексин;
    – ЗАО НПО “ИМПУЛЬС”;
    – ОАО “Пензатяжпромарматура”;
    – ОАО “Чеховский завод энергетического машиностроения”;
    – ОАО “Барнаульский котельный завод” (СибЭнергомаш);
    – ОАО “Благовещенский арматурный завод”;
    – ОАО ” АРМАГУС”;
    – ОАО “АРЗИЛ”;
    – ЗАО “Тулаэлектропривод” и др.заводы.
    ” Электропривода марки НА, ВА, НБ, ВБ, НВ, ВВ, НГ, ВГ, НД, ВД, умеренного, холодного, а так же тропического исполнения.
    Также предлагаем к поставке продукцию ЗАО “Ясногорский машиностроительный завод”, а именно:
    Насосы и насосные агрегаты для перекачки холодной и горячей воды, обводненной нефти, химически нейтральных и кислотных жидкостей, масел:
    ЦНС (Г, Н, М, К) 13-70…350, 38-44…220, 60-66…330
    ЦНС, ЦНСН, ЦНСНт 60-50…250 (Стальные), ЦНС, (Н, Г) 105-98…490, 180-85…425
    ЦНС 180-500…900 (Стальные), ЦНС (Г, Н, М, К) 300-120…600
    ЦНС 300-650…1300, ЦНС (Н) 500-160…720 (стальной), ЦНС (Г) 850-240…960,
    Турбонасос Н-2, К-60М
    и запасные части к насосному оборудованию.
    Более подробную информацию Вам предоставят по телефону:
    [b]Рассмотрим любые формы и варианты взаимовыгодного сотрудничества![/b]

    Илья
    Тел/ф. 8(48766) 2-53-32
    td-arm@bk.ru

  19. Видео курс “Исповедь копирайтера”

    – Заработок от 50 до 100 долларов в день уже в первый месяц!
    – Пошаговые инструкции организации online бизнеса без вложений
    – Как развить свой бизнес до уровня дохода 2000$ в месяц!

    Для пользователей этого прекрасного форума предоставляется купон скидки в размере 300 рублей на заказ интерактивного обучающего видео курса по заработку в Интернете без вложений!

    Купон скидки: vagas
    Сумма скидки: 300 руб.
    Купон скидки действует с 01.07.2011 до 31.07.2011
    Дополнительная информация на: vipm.org

  20. скачать avi конвектор, нагано скачать mp3, скачать человек паук 3 torrent, скачать торрент точка

  21. Man .. Excellent .. Amazing .. I’ll bookmark your site and take the feeds additionallyI am glad to seek out so many useful info right here within the publish, we’d like work out extra techniques in this regard, thanks for sharing. . . . . .

  22. whoah this weblog is great i love reading your posts. Keep up the great paintings! You realize, a lot of individuals are hunting round for this information, you can aid them greatly.

  23. Its like you read my mind! You seem to understand a lot approximately this, such as you wrote the book in it or something. I believe that you just could do with a few p.c. to drive the message home a bit, but other than that, this is magnificent blog. A great read. I’ll definitely be back.

  24. Всем привет! Подскажите, где можно программу синхронизации мобильник с ПК скачать?

  25. ЛЬГОТНОЕ ПРЕДЛОЖЕНИЕ, ЗАСЛУЖИВАЮЩЕЕ ВНИМАНИЯ!

    ШАНС, КОТОРЫЙ БЫВАЕТ РАЗ В ЖИЗНИ!

    ШКОЛА АВТОМАТИЗИРОВАННОГО БИЗНЕСА В СЕТИ ИНТЕРНЕТ “Империя Разума” ОБЪЯВИЛА НАБОР ВСЕГО ЛИШЬ В НЕСКОЛЬКО ГРУПП (!) НА БЕСПЛАТНОЕ ПРОХОЖДЕНИЕ СВОЕГО УНИКАЛЬНОГО ОБУЧАЮЩЕГО КУРСА (аналогов НЕТ)!

    Пройдя обучение в школе “Империя Разума”, Вы за год заработаете свой миллион, и вопрос не в том как вы это сделаете, а в том, СКОЛЬКО раз вы это сделаете… (!)

    100% ГАРАНТИРОВАННЫЙ РЕЗУЛЬТАТ БЕЗ УСИЛИЙ (ЛЮБОЙ МОЖЕТ СДЕЛАТЬ ЭТО) – ПРОВЕРЕНО НЕОДНОКРАТНО!

    РЕЗУЛЬТАТ ($) УЖЕ ЧЕРЕЗ НЕСКОЛЬКО МИНУТ ПОСЛЕ НАЧАЛА ОБУЧЕНИЯ!

    БЕСПЛАТНАЯ ПРОБА БЕЗ ВСЯКОГО РИСКА!

    ВСЕ ЧТО ВАМ НУЖНО: запросить контакт в skype: oneimperator со словами “НА ОБУЧЕНИЕ” и с вами свяжутся по мере формирования групп.

    сайт Империи Разума — http://e1234.ru

    ДЕЙСТВУЙТЕ СЕЙЧАС, НЕ ОТКЛАДЫВАЯ – ПОКА ЭТО МОЖНО ПРОЙТИ БЕСПЛАТНО!

    ОЖИВИТЕ СВОЮ МЕЧТУ – ХВАТИТ ТЕРЯТЬ ВРЕМЯ!

    (!) В виде рекламной акции один сезон школы “ИМПЕРИЯ РАЗУМА” – проводится бесплатно, не важно в какой компании вы трудитесь – вам лишними дополнительные знания не будут ни когда (!), для записи стучите в скайп oneimperator с запросом “на обучение” вас добавят и оповестят. Почему скайп? Да по тому что у кого нет скайпа – тот не может называться “Интернет ПРЕДПРИНИМАТЕЛЕМ” и соответственно тому нужна другая школа.

  26. Приветствую ув. Форумчане!
    Предлагаю прогон лицензионным Хрумером 7.012 по свеже-собранным базам!
    собираю базы по вашим ключам под заказ

    стоимость прогона – от 20 wmz
    Возможен сбор базы по заданным вами параметрам, стоимость сбора базы входит в стоимость прогона, тоесть стоимость сбора базы по вашим ключевикам стоит бесплатно если вы заказываете прогон

    контакт ICQ#: 132561973

  27. Новый ресторан-Паб “Crazy Hunter” предлагает ощутить себя охотником, поймавшим свою добычу и приготовившим его на месте. Наши блюда не оставят Вас равнодушными, Вы будете к нам возвращаться вновь.
    Адрес ресторана: Санкт-Петербург, ул. Расстанная 2.
    +7 (812) 339-18-01, звоните!

  28. Ребенок уговорил приобрести котика домой.
    В результате пришлось его дарить соседям.
    Вдруг оказалось, что у сына на кошачью шерсть аллергия!

  29. Кто знает нармальную соц сеть? Кроме майла,одноклаников и всякой подобной лабуды.

  30. Во время экономического развития страны , важным аспектом является транспортная доступность.
    В нашей великой стране железные дороги и железнодорожные грузоперевозки являются основным средством передвижения людей и грузов.
    Кто то считает подругому ?

  31. Истина проста и очевидна.
    Причем настолько очевидна, что мы, ежедневно созерцая ее,
    привычно не замечаем очевидное.
    Не верите? А мне и не нужно верить. Просто подойдите к зеркалу.
    Что вы видите?
    – Глупый вопрос, – скажете вы, – разумеется, я вижу себя.
    Вопрос совсем не глупый. Я же не спросил: “Кого вы видите?”.
    Я спросил: “Что вы видите?”
    – А что я могу увидеть, кроме себя?
    Да, вы видите себя, но разве вы не замечаете СИММЕТРИЮ?
    Два одинаковых глаза, две одинаковых щеки, два одинаковых уха…
    А под вашим симметричным лбом находятся два симметричных
    полушария вашего мозга и вы находитесь на симметричной планете,
    у которой два ПРОТИВОПОЛОЖНЫХ по своему значению полюса.
    Даже когда под своими ногами вы видите якобы не симметричный
    камень, не забывайте о том, как симметрична его кристаллическая
    решетка. Симметрия повсюду. Только слепой не увидит ее, но он
    обязательно обнаружит ее, потрогав своими симметричными руками.
    Вот почему, когда вы видите симметрию, вы видите ЗАКОНОМЕРНОСТЬ,
    а если вы видите закономерность – значит, вы видите ЗАКОН.
    – Но как я могу увидеть Закон?
    Неужели не ясно? У вас два ПРОТИВОПОЛОЖНЫХ (левый и правый)
    глаза, две противоположных руки и так далее. И вы видите, что
    ПРОТИВОПОЛОЖНОЕ ОДИНАКОВО – то есть (на языке науки)
    КАЧЕСТВЕННО СООТВЕТСТВУЕТ друг другу. Другими словами,
    когда вы видите симметрию, на самом деле вы видите
    Закон Качественного Соответствия Противоположного и за
    примерами ходить далеко не нужно – пример перед вами в зеркале.
    Мы (познавшие Истину) называем этот Закон Принципом
    Сосуществования.
    Вы спросите – Этот Закон и есть Истина?
    Отвечаю – Нет, этот Закон еще не Истина, но он является ее
    ИСТИНООБРАЗУЮЩЕЙ – неотъемлемой частью: потому что этот Закон
    также очевидно подразумевает другой.
    Я же обещал вам, что вы увидите Истину (“лучше раз увидеть,
    чем сто раз услышать”) и сдержу свое слово.
    На этот раз, предлагаю отойти от зеркала и отправиться
    (мысленно, разумеется)… в цирк! 🙂
    Почему в цирк? Потому что только там можно сегодня найти
    “живого” канатоходца, который, демонстрируя на радость публике
    свое искусство, покажет нам Истину. Я бы мог показать вам
    Истину на чем угодно, но канатоходец – самый очевидный и всем
    известный пример.
    Если вы спросите нашего воображаемого канатоходца, который
    балансирует над пропастью, что для него является ДОБРОМ, он
    обязательно ответит – РАВНОВЕСИЕ. Почему? Потому что, утратив
    равновесие, он неминуемо упадет и…
    С помощью чего канатоходец поддерживает равновесие?
    Ответ также очевиден – с помощью балансировочного шеста,
    который он держит строго посередине. Вот она “Золотая Середина”
    Гаутамы Будды, которая делит балансировочный шест на ДВЕ РАВНЫЕ
    ПОЛОВИНЫ – Качественно Соответствующие друг другу (одинаковый
    вес) ПРОТИВОПОЛОЖНОСТИ.
    Другими словами, Закон Качественного Соответствия
    Противоположного подразумевает Закон Тождества (РАВНОВЕСИЯ)
    Противоположного. Если вы увидели СОСТОЯНИЕ РАВНОВЕСИЯ, в
    котором находится канатоходец под куполом цирка, значит, вы
    увидели Закон Тождества Противоположного, а еще увидели, что
    это состояние достигается только с помощью Качественного
    Соответствия Противоположного.
    Этот Закон мы называем Принципом Существования: потому что
    все существующее ТОЖДЕСТВЕННО и, наоборот, все, что прекращает
    свое существование, ПРОТИВОРЕЧИВО.
    Так вот о чем свидетельствовала симметрия, которую вы увидели
    в зеркале! Она свидетельствовала о том, что вы существуете.
    Сомневаетесь? Если сомневаетесь, представьте что будет с вами,
    если нарушится биологическое равновесие в вашем организме, или
    представьте, что будет с Солнечной Системой, если в ней
    нарушится равновесие – тождество (противоположных) центробежных
    и центростремительных сил. Все еще сомневаетесь?
    Если же вы это представили, то увидели действие Закона Эволюции,
    ОТРИЦАЮЩЕГО НЕСООТВЕТСТВИЕ ЕГО ПРОТИВОРЕЧИЕМ (неравновесием) И
    УТВЕРЖДАЮЩЕГО СООТВЕТСТВИЕ ЕГО ТОЖДЕСТВОМ.
    А еще вы увидели Истину, которая является СУЩНОСТЬЮ всего
    существующего. Вот почему Истина пронизывает все сущее и
    кажется нам непостижимой: так как “форма богаче сущности”,
    но если не будет сущности – не будет и формы. Ничего не будет.
    Я сдержал свое слово и “показал” вам Истину.
    Разумеется, вы еще не знаете (или знаете?) как использовать
    это знание. Поэтому пример его использования вы найдете на моей
    странице (в профиле) в статье о демократии.
    Ах, да. Этот Закон (Закон Эволюции) мы называем Принципом
    Правосудия: так как Природа отрицает несоответствие его
    противоречием, а Разум судит преступника его злом.
    А еще, вы теперь знаете, что есть добро и что есть зло.

  32. Подпишитесь на бесплатный онлайн курс “Уличная драка: выжить и победить”, и получите бесплатно:
    • Книгу “3 самых эффективных приема самообороны: что отличает жертву от хищника?”
    • Аудио “Страх и борьба со страхом”
    • Аудио “Вся правда о самообороне”
    • Видеозапись тренинга “Бакланка: секреты хулиганской драки”
    • Аудио “Как сохранять уверенность в критических ситуациях”
    • Видео “Мужская харизма и уверенность. Как влиять на людей” и т.д.

    Подробнее: http://u.to/020qBQ

  33. Космос устроен очень интересно, а челеовек устройством подобен космосу. Веды содержат информацию исчерпывающую обо всем.

  34. По данным Всемирной организации здравоохранения, привычка употреблять спиртное является причиной почти 4 % всех смертей в мире. От злоупотребления спиртными напитками погибает больше населения, чем от СПИДа, туберкулеза и войн. Наибольшее влияние употребления алкоголя на летальность наблюдается в РФ и странах СНГ: каждый пятый человек в них умирает от причин, связанных с употреблением спиртного

  35. Привет всем!
    Помогите выбрать нормальную кухонную плиту с духовкой до 400$
    В магазинах очень много разных брендов, незнаю какую выбрать.
    Размер 50×60 электроподжиг я так поняла есть сейчас во всех моделях.
    У друзей BEKO поржавела через 3 года после покупки, так что BEKO отпадает, хотя в магазине меня уверяли что раньше чем лет через 15-20 ржаветь ничего не будет ). Вообщем незнаю, единственное что привлекает в BEKO это стоимость.

    В одном магазине говорят берите Gorenje,
    в другом говорят Nord в третьем Hotpoint-Ariston.
    Так на каком все – таки остановится?
    Мне безумно нравится Ariston C 34S цвета металлик, но он за небольшими пределами моего бюджета, но возможно смогу понятнуть.
    Помогите советом, я кухонные плиты никогда не покупала. Хочется купить и что бы не ржавела и хорошо работала много лет.

  36. Запчасти Howo .
    Тысячи запчастей .
    Я тоже не мог подобрать хорошую фирму. Сейчас обращаюсь только в БольшегрузБайкал.
    Прямые поставки с Китая.

  37. Продам

    1. Буровая установка: Bauer BG24H (Германия)
    2. Год выпуска: 2008
    3. Наработка: 2440 м.ч.
    4. Двигатель: CAT C9
    5. Крутящий момент: 240 кНм
    6. Базовая машина: Senneborgen
    7. Диаметр бурения: 400-1500
    8. Келли-штанга: 33 метра
    9. Стоимость: 40 000 000 руб. (торг уместен)

    Техника для устройства буронабивных свай диаметром 620-1500мм. Находится в России.

    [img]http://moscow.burovik.com/img/Wirth_Ecodrill_22SV.jpg[/img]

    [img]http://moscow.burovik.com/img/Bauer_BG24H.jpg[/img]

    контактный телефон: +79126216297
    г.Нижний Тагил

  38. Всем привет!!!

    Можем предложить Вам разнообразные базы данных кроме того можем собрать данные в сети Интернет.

    Всегда есть в наличии: – базы страховых организаций(в том числе автострахование) – базы банков – телефонные справочники и базы сотовых – базы данных предприятий. И другие базы данных, которых огромное количество..

    Кроме того, регулярно собираем: анкетные данные сайта Вконтакте, объявления с сайта Авито.ру, информацию о предприятиях, ИП и организациях из 2ГИС и др. Кроме того осуществляем сбор информации практически с любых других порталов по Вашему усмотрению, например с сайтов тендеров и закупок, с сайтов с резюме, с досок объявлений и многое другое Форматы БД различны: CronosPlus, акцесс Access (.mdb), эксель текстовые подборки и отдельные программы…

    Наши базы данных купить можно также на интернет-ресурсе bazabd.ru

    По вопросу покупки баз данных и сбора информации просьба обращаться на электронную почту: transoilsib(собака)gmail.com

    Также, готовы предложить обмен базами данных.

  39. Садитесь, я так вас подвезу, а то замёрзнете… помню только, что все прошло натурально, а мальчику ну ооочень понравилось, все не мог поверить, что я делаю это в первый раз Nevesta мой первый шиньон был по БОЛЬШОЙ просьбе мужчины! делала я это под одеялом….чувства…не понравилось…волосы мешали.. не могу сказать, что сейчас это нравиться делать… просто сама идея странная…он на тебя смотрит, а ты сосешь…там где-то внизу… хотя на во второй раз он мне сказал, что я делаю это, как профессионалка… даже обидно стало.

  40. [quote]Добрый день, ищу хорошего стеклодува-кварцедува в России, Украине, Беларусипричемищу давно, максимально что нашел в интернете это компания Приватная Марка вот http://privatnamarka.com/category/steklo-ruchnoy-raboty/. Но меня интересует, не только изготовление бутылок, но и работа с кварцевой трубой и кварцевыми стеклами большой сложности. Для того чтобы изготовить лабораторную посуду разного рода, на том же сайте нашел раздел http://privatnamarka.com/category/butylki-shtofy-butyli/probirki-stekljannye-laboratornye/, но это не совсем то что мне нужно. Можете подсказать хорошую фирму, которая занимается выдувкой и изготовлением изделий из стекла и кварца?
    Костя Питер [/quote]
    Приветствую, уважаемые виноградари и виноделы!

    Доброго времени суток, мне ваша ситуация знакома, долгое время искали товарищу компанию где можно заказать эксклюзивную бутылку ручной работы по собственному дизайну. Однажды увидел у друзей интересную бутылку в форме корабля поинтересовался где они приобрелиее, мне дали ссылку вот на этот сайт компании СЛК http://slkdecor.ru/ Я списался с ихними менеджерами и поинтересовался, могут ли они изготовить бутылку по моему дизайну, он хотел сделать фирменную бутылку подводку для его IT-Компании,бутылка была в форме Козы 2015. Как оказалось это не проблема, меня пригласили в офис с макетом того что я хочу, мы с дизайнером доработали его и отправили на производство, буквально подождав день или два, точно уже не помню, я смог купить бутылку ручной работы собственнопридуманной формы. В последствии заказывал там и лабораторную посуду, как то пробирки, мензурки, мерные стаканы, мне это нужно для работы в институте, работаю я научным сотрудником. http://slkdecor.ru/catalogue/ здесь вы могли бы ознакомится с продукцией этой компании. И заказать у них тоже очень легко и доступно, не нужно производить кучу непонятных операций. Все делается буквально в несколько кликов.Так же можете связатся с менеджерами по телефону: +7(903)723-49-76.
    Надеюсь что смог вам помочь.
    Денис город Казань.

  41. Здравствуйте, подскажите пожалуйста где я могу приобрести качественную емкость из нержавейки для брожения вина.Смотрел на форуме http://privatnamarka.com/forum/9/kak-sdelat-gladkuyu-surguchnuyu-pechat/. Мне передали с юга много винограда, а он оказался технического сорта, теперь вот думаю сделать вино и ищу для этого тару, нашел вот этот сайт http://artimperio.com/sorta-vinograda/himija-dlja-vinograda-i-inventar/paurin-zashita-vinograda-ot-bakterialnogo-raka/, однако там нет того что меня интересует, еще смотрел тут, но тоже не нашел пригодного варианта. Если кто знает порядочную компанию, пожалуйста сообщите их телефон или ссылку на сайт. Заранее спасибо, Ринат из Казани.

Leave a reply to ranim_1961rard Cancel reply