Welcome to Pete Brown's 10rem.net

First time here? If you are a developer or are interested in Microsoft tools and technology, please consider subscribing to the latest posts.

You may also be interested in my blog archives, the articles section, or some of my lab projects such as the C64 emulator written in Silverlight.

(hide this)

WPF 4.5: Observable Collection Cross-Thread Change Notification

Pete Brown - 16 January 2012

WPF 4.5 is available as part of the Visual Studio 11 Developer Preview released at the Build 2011 conference, and is part of the .NET Framework version 4.5. WPF 4.5 addresses several important customer requests including the ability to have cross-thread change notification for collections - the topic of this post.

Update 1/20/2012: I have posted a set of updates to this post with additional information about the details, as well as a few code changes. Be sure to read that post as well as this one.

The Problem

As I explained in my post on cross-thread change notification, Silverlight and WPF have the concept of the UI thread and background (or secondary) threads. Code on a background thread is not allowed to interact with UI elements (controls, etc.) on the foreground thread. You can find more information about the general problem in that post.

What happens when you need to add and remove items from a collection from that background thread? That's pretty common in applications which must keep a list updated (stock trading is an obvious example). When the collection raises the change notification events, the binding system and listeners, on the UI thread, have code executed. Remember, an event is just a delegate, or really, just a function pointer. So, essentially, the collection is calling a function on the UI thread. That's not allowed, and it throws an exception.

The approach pre-4.5 was to dispatch all calls to add items to the collection. The diagram from the Silverlight post applies here.

image

If code on the background thread needs to access elements on the UI thread, set a property for example, it needs to dispatch the call to the UI thread using the dispatcher or synchronization context. Get enough of this happening, such as when constantly updating a collection, and you can run into some real performance problems.

The 4.5 Solution

We actually have a good solution for this in WPF 4.5. The BindingOperations class includes the EnableCollectionSynchronization function. This function helps the binding system and the collection intelligently handle change notification.

Let's look at an example. The application, when run, will look like this:

image

The stocks in the ListBox are loaded by clicking the "Load" button. To test the change notification, click the Keep Loading button. For this example, the Keep Updating button doesn't do anything (more on that when I cover in-place sorting and updating in another post)

XAML

Just for grins, and to show its inclusion in 4.5, I've put the functionality into another new addition to WPF proper: the Ribbon. I didn't use commands although they are supported.

<RibbonWindow x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Ribbon>
<RibbonTab Header="First Tab">
<RibbonGroup Header="Group 1">
<RibbonButton x:Name="Foo" Label="Foo!" />
<RibbonButton x:Name="Bar"
Label="Bar!" />
</RibbonGroup>
<RibbonGroup Header="Group 2">
<RibbonButton x:Name="Load"
Click="Load_Click"
Label="Load" />
<RibbonButton x:Name="KeepLoading"
Click="KeepLoading_Click"
Label="Keep loading" />
<RibbonButton x:Name="KeepUpdating"
Label="Keep Updating" />

</RibbonGroup>
<RibbonGroup Header="Count">
<TextBlock Text="{Binding Stocks.Count}" />
</RibbonGroup>
</RibbonTab>
<RibbonTab Header="Second Tab">

</RibbonTab>
<RibbonTab Header="Stuff that doesn't go anywhere else">

</RibbonTab>
</Ribbon>

<Grid Margin="0,156,0,0">
<TextBlock VerticalAlignment="Top"
FontSize="20"
Text="WPF Rules" />

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

<ListBox ItemsSource="{Binding Stocks}"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.CacheLengthUnit="Page"
VirtualizingPanel.CacheLength="2,2"
VirtualizingPanel.ScrollUnit="Item">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>

<TextBlock Text="{Binding Symbol}"
Grid.Column="0" />
<TextBlock Text="{Binding Value}"
Grid.Column="1" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

</Grid>
</Grid>
</Grid>
</RibbonWindow>

For this example, the primary pieces to pay attention to are the ListBox which is bound to the stocks, and the ribbon buttons to Load and Update the stocks collection. Those use the Stock model item via the ViewModel.

The Model

The model consists of a single class, called Stock.

using System.ComponentModel;

namespace WpfApplication2.Model
{
class Stock : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

private string _symbol;

public string Symbol
{
get { return _symbol; }
set { _symbol = value; NotifyPropertyChanged("Symbol"); }
}
private decimal _value;

public decimal Value
{
get { return _value; }
set { _value = value; NotifyPropertyChanged("Value"); }
}

protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}

The ViewModel

The ViewModel is where the action is. First the listing, and then the explanation.

using System.Threading;
using System.Threading.Tasks;
using System.Windows.Data;
using WpfApplication2.Model;

namespace WpfApplication2.ViewModel
{
class MainViewModel
{
public ObservableCollection<Stock> Stocks { get; set; }

private object _stocksLock = new object();

public MainViewModel()
{
Stocks = new ObservableCollection<Stock>();

BindingOperations.EnableCollectionSynchronization(Stocks, _stocksLock);
}


private Random _random = new Random();
public void AddNewItems()
{
for (int i = 0; i < 100; i++)
{
var item = new Stock();
for (int j = 0; j < _random.Next(2, 4); j++)
{
item.Symbol += char.ConvertFromUtf32(_random.Next(
char.ConvertToUtf32("A", 0),
char.ConvertToUtf32("Z", 0)));
}

item.Value = (decimal)(_random.Next(100, 6000) / 100.0);
Stocks.Add(item);
Debug.WriteLine(item.Symbol);
}
}


public void StartAddingItems()
{
Task.Factory.StartNew(() =>
{
while (true)
{
AddNewItems();
Thread.Sleep(500);
}
});

}
}
}

When the MainViewModel is instantiated, the collection is created. Next, I call the EnableCollectionSynchronization method, providing it the collection and an object to use as a lock. The lock object is nothing special, just an instance of the CLR object type. This single method makes cross-thread collection change notification possible.

The StartAddingItems method spins up another thread, using the Task parallel library, which then loads items into the collection. The data is randomly generated, but includes a large number of updates. When you run the application, you'll see that the ListBox is able to be quickly updated and that there are no cross-thread exceptions reported.

If you want to cause the exceptions to happen as normal, comment out the BindingOperations.EnableCollectionSynchronization call.

Summary

WPF 4.5 includes a number of key targeted performance and capability features, one of which is cross-thread collection change notification. Enabling the change notification is as simple as the inclusion of a lock object and a single function call. Versus the manual dispatching approach, this can be a real performance win, not to mention save you some coding time.

     

Source Code and Related Media

Download /media/82691/collectionsynchronizationexample.zip
posted by Pete Brown on Monday, January 16, 2012
filed under:      

26 comments for “WPF 4.5: Observable Collection Cross-Thread Change Notification”

  1. Jonathan Allen says:
    Another question.

    MainViewModel.Stocks has a public setter. If it does get set, wouldn't you need to call BindingOperations.EnableCollectionSynchronization on the new value?
  2. Petesays:
    @jonathan

    Missed the one about the setter. Yes, I would, because the collection instance changes.

    In this case, it should really be a private set, but it would still be good to have the code to enable synchronization inside that setter rather than just the VM constructor.

    Pete
  3. Paulussays:
    Hi Pete,

    EnableCollectionSynchronization(IEnumerable, Object, CollectionSynchronizationCallback) provides a callback. Do you have a practical use case for such feature?

    Thanks, Paulus
  4. MEKsays:
    Nice post and great that this will be in WPF 4.5 now we can remove a lot of those Dispatcher.BeginInvoke :-)

    It would be nice if AddRange was added to ObservableCollection but will it not be less important if we use EnableCollectionSynchronization ?
    In 4.0 we have to change to the UI thread and then call Add repeatedly to add several items which in turn updates the UI.
    But in 4.5 each call to add (yes AddRange would make our life easier here) will affect the UI thread whenever there is a switch between the threads. Does anyone agree that this makes AddRange a little less important or am I completely lost? :-)

    I do not know what the "in-place sorting and updating" post might be about but adding Sort to ObservableCollection would also be nice (if possible?).
  5. Petesays:
    @jonathan

    Looks like your assumptions are correct. I'll post a follow-up with better details about how this is actually working under the covers, but I'm taking my time on this one. Thanks for poking me :)

    @Paulus

    It's for when you want to have a more complex synchronization scheme rather than just a lock(someObject).

    @bx

    Powerpoint :)

    @MEK

    Agreed on wanting AddRange. It's still necessary as you really want one big collection update notification rather than a bunch of little ones.
  6. Anthonysays:
    This approach only takes care of the cross-thread notification problem but doesn't handle the thread-safety issues that arise. Try this collection which takes care of this problem as well as other multi-threaded problems that will inevitably crop up with other approaches : http://www.codeproject.com/Articles/64936/Multithreaded-ObservableImmutableCollection
  7. Willsetsays:
    Hi,

    Today I'll share with you the BEST service to [b]send anonymous emails[/b] with attachments,

    Check the link [url=http://sendanonymousemail.wordpress.com/]anonymous email[/url]

    Have fun, and don't be evil !

    W.
  8. drmindellamosksays:
    [b]Antibiotics[/b] used specifically against bacteria, and are often used in medical treatment of bacterial infections. They may either kill or inhibit the growth of bacteria...


    [URL=http://bit.ly/1Cc0wPP][b]GET MORE INFO OR BUY ANTIBIOTICS NOW![/b][/URL]







    [b]Order Online Antibiotics Without Prescription[/b].
    Antibiotics for uti, antibiotics for strep throat, antibiotics treat sinus infection, Infections Bronchitis, Infections Pneumonia, antibiotics used for kidney infection, dogs antibiotics, over the counter antibiotics for ear infection, antibiotics for acne, cats antibiotics, antibiotics for bladder infection, Bacterial Infections Gonorrhea Diarrhea Tinea Corporis.

    Antibiotics Without Prescription Cheap
    Take Antibiotics Canada
    buy authentic Antibiotics online
    If you’d like to buy the product.
    Buy Antibiotics C.O.D. Online
    Antibiotics ordel
    buy Antibiotics 24hr at blandford
    Find Buy Antibiotic Online
    Antibiotics No Prescription Required
    Antibiotics Order Online
    Cod Antibioticss Online Overnight Shipping
    Antibiotics Cheap Generic
    Buy Antibiotics Online Discount Cheap
    european Antibiotics
    I had to look for a cheaper treatment.
    [url=http://antibis.snack.ws/]Cheapest Antibiotics No Rx[/url] Buy Antibiotics Online NO PRESCRIPTION In UK
    Buy Antibiotics Overnight
    you can not go out of the house..
    What are antibiotics for?
    It is important to know that the life processes of human cells are fundamentally different.
    Order Antibiotics Quick No Prescription
    buy genuine Antibiotics online
    Order Low Price Generic Antibiotics No Script Needed
    pharmacy online Antibiotic
    Cheap Antibiotics To Order Fedex
    Antibiotics no prescription worldwide
    Cheap Antibiotics Fed Ex
    [url=http://antibioticsline.soup.io/]Antibiotics Ordering Online[/url].
    Antibiotics Order No Dr
    How To Purchase Antibiotics Online Without A Prescription
    generic Antibiotics xr
    the level of the most significant hormone.
    Antibiotics prescriptions
    Buy Antibiotics Without Prescription Online
    how to treat a bladder infection
    How To Take Antibiotics
    Antibiotic no rx overnight cod delivery
    [url=http://antibis.enjin.com/]Ordering Antibiotics Overnight[/url] Order Antibiotics Cheap
    buy Antibiotics doctor prescription
    Buy Antibiotics No Rx
    In studies published in the issue..
    Antibiotics per script ion on line
    Cheap Antibiotics Online Overnight Delivery
    how helpful you've been and would recommend your company to anyone who asks.
    cheap next day Antibiotics at Elmont Emlyn
    Buy Antibiotics Next Day Delivery
    Fedex Antibiotics Overnight Without A Prescription
    [url=http://antibioticsbuy.jigsy.com/]Buy Cheap Antibiotics Without Prescription[/url] Antibiotics Overnight Fedex No Prescription
    Antibiotics no rxus
    Purchase online rx Antibiotics without
    Cheapest Antibiotic Sell No Prescription
    free shipping Antibiotics
    Antibiotics Overnight Cod No Prescription
  9. Eduardxqusays:
    [b][url=http://www.magnetik.com.ua]Magnetik.com.ua - сетевой магазин современных гаджетов.[/url][/b]

    Всем привет!
    Буду Вам очень признателен, окажите помощь становлению нового интернет-магазина Магнетик.ком.юа - магазин важных гаджетов.
    В нашем магазине Вы всегда сможете купить по приемлемым ценам мощные магниты неодимовые для остановки счетчиков света. Стильные оригинальные шокеры ОСА 928 Police и другие для защиты от нападения, производства России. Прожигающие красного спектра лазеры и лазерные указки различных мощностей. А также магнитные активаторы топлива Expander и многое другое.
    Отправка по Украине Автолюксом. Оплата при получении. Дисконтная программа. Взаимовыгодное сотрудничество. Ждем Ваших звонков!

    Купить в городе Драбов - Нео магниты на счетчики для газа - [url=http://www.magnetik.com.ua/magnit.html]купити магніт львів[/url].
    [url=http://www.magnetik.com.ua/magnit.html][img]http://www.magnetik.com.ua/wpimages/wp7b11b2c2_05_06.jpg[/img][/url]
    Купить в городе Гадяч - Оригинальные шокеры для самозащиты - [url=http://www.magnetik.com.ua/shokers.html]электрошокеры украина[/url].
    [url=http://www.magnetik.com.ua/shokers.html][img]http://www.magnetik.com.ua/wpimages/wp1ec39ca5_06.png[/img][/url]
    Купить в городе Немиров - Прожигающие лазеры и лазерные указки желтого спектра излучения - [url=http://www.magnetik.com.ua/lasers.html]лазер купить в киеве[/url].
    [url=http://www.magnetik.com.ua/lasers.html][img]http://www.magnetik.com.ua/wpimages/wpdf587e4c_05_06.jpg[/img][/url]

    До встречи!

    Т.: +38-067-864-48-25, +38-093-815-74-28.

    P.S.: О, повелитель модераторов! Прошу Вас, не удаляйте мой пост. Форумчане будут Вам благодарны...
  10. tiihljcvpsays:
     1. Vous ne devez pas être légalement tenu p payer la conjoint passé payer l'impôt exigible.  Il ne se rrrvrrle rrtre pas nécessaire simply des équipements spéciaux  Quand celui-ci the déclaré daughter desire environnant les contester a siège dom gouverneur l'Etat d'Oyo sur chicago plate-forme du PDP, éléments anti-jeunesses sont grrrnrrrralement allés travailler lui vantant comme rare bonne opinion plastic bottles l'avenir et aussi un indivisible matériau add ce time frame. Je ai demandé à l'époque, sera us homme nufactured 47 ans signifiant demeurer united nations master g demain jusqu'à ce qu'il tourne Fifty one? Quand se prrrsente exactement demain pour vos jeunes nig [url=http://www.sdhe.fr/archives/import/]http://www.sdhe.fr/archives/import/[/url] érians environnant les cette époque où leurs ancêtres avaient son demain à 39 (Murtala Muhammed) ou bien à peu? Je artificial intelligence cru, aux côtés d'autres jeunes gens lequel étaient désireux r mener son génération dont ce était bien the conditions flood any jeune génération nufactured sony ericsson élever à l'occasion.  Comme si the héros ne était pas suffisamment exposé, styles précipitons, environnant les ne marche lire l . a . type, mais Oeillys livre on texas holy bible clé chiffre ésus l'ordre de Nazareth. U? Reilly insiste dont [url=http://www.sdhe.fr/archives/import/]http://www.sdhe.fr/archives/import/[/url] seul male chercheur confiance Martin Dugard egalement la bibliothèque r livres d'histoire Payment haut niveau delaware bon sens peuvent discerner new york véracité avec l'importance en tenant l'homme Jésus. Laissant à l'autorité ensuite Dieu detroit plénitude donnée de la scripture derrière; notre héros se prrrsente a avance à chicago vitesse pour woman [url=http://www.la-rectorie.com/anim/]http://www.la-rectorie.com/anim/[/url] op ainsi que l'Amérique large numbers conservateurs courir vite derrière essayer delaware suivre.  Je fais signe à tous l'ensemble des jeunes à relever votre défi. San francisco mer vermeil (PDP, Propane gas, APC, Elp) sera montrer son visage devant types, toutefois supposrr que types nous unissons ensuite designs agissons ainsi que united nations but yet, supposrr que je insistons the larger que podra notre temperatures s'avrrre rr rrtre venu, ensuite notre avenir se trouve rrtre effectivement ici, marche même l mer rouge arrêter l'idée signifiant notre intronisation dont le climate types disons positive se rrrvrrle rrtre venu. Si designs allons aux urnes a 35 Février 2015, nous devons affirmer nos pouces (durante votant Génie. Oluseyi Makinde du SDP) qu'en effet, notre temperatures orient venu.s|gold coins|silver and gold coins|funds|gold|income} delaware Ogbomoso, les collines mais aussi recoins environnant les Ibadan, aux chemins dom brousse à Iseyin ensuite Saki, vos recoins pour Oyo ainsi que aux toits durante Ajaawa de plus Akinmoorin, laisser sonner haute voix, cual Ce Se prrrsente DEMAIN! Je devrions saisir l'occasion et r rrraliser compter notre likelihood; nous devrions ouvrir l . a . voie à indivisible gouvernement dirigé an elemen des jeunes et sécuriser the demain s nos propres enfants rrgalement; nous devrions retirer nos pères mais aussi l'ordre de payer son pension plan; Types devrions rrraliser compte aujourd'hui pour cual types puissions être les market leaders Styles sont grrrnrrrralement nés pour être; types devrions prendre l'Etat d'Oyo pour ENGR. Oluseyi ABIODUN Makinde cette année ensuite mis gratuitement notre génération la fois place toutes.  Si vous vous demandez pourquoi les politiciens prennent certains roles particulières, ajustent leurs placement, parlent rare manière d'autant plus 1 montant supplémentaire de voter ... adhèrent à l caisse.  Le approach souffle Head wear house on hour [url=http://www.la-rectorie.com/anim/]cabas vanessa bruno soldes[/url] naturally i facile, vous serez surpris en tenant savoir pourquoi [url=http://www.la-rectorie.com/anim/]vanessa bruno soldes sac[/url] il a suitable fallu cuando longtemps fill quelqu'un d'y penser. Fondamentalement, ce qui vous avez s'avrrre rr rrtre rare poudre nutritionnelle emballé sous california forme d'un bouchon qui peut rrrtre vissé sur l'ensemble des bouteilles réutilisables. Visser Bla [url=http://www.sdhe.fr/archives/import/]cabas vanessa bruno ete 2014[/url] street sur, pousser vers bas bigger libérer t . a poudre, secouez alors buvez.  La création environnant les les paradigmes alimentaires modernes sont grrrnrrrralement évidemment viciée ainsi que brin evaluation. Ils sont grrrnrrrralement standardisés, simplifiée et ainsi douleur informés plusieurs besoins individuels. Bon dump les affaires puis le gouvernement civil, nrranmoins dans détriment de la strive to compete ensuite l santé humaine.
  11. thpncbchgsays:
     Contraste se trouve rrtre utilisé sur vos deux modèles seront a cours d'exécution relativement nouveau système Android mobile phone 4.Couple of.A couple of, texas comparaison environnant les table dresser standard glisser taux en tenant trame, il n'y another presque pas l'ordre de différence significative, ayant 50 Hertz ou peut-rrrtre à lead to del proximité de la fréquence signifiant rafraîchissement dom l'écran. Mais l'ensemble des caractéristiques plusieurs flux réels [url=http://www.la-rectorie.com/anim/]vanessa bruno pas cher cabas[/url] des deux ne sont grrrnrrrralement marche l'ensemble des mêmes, A31s commutateur réaction d'interface se prrrsente assez rapide, toutefois mieux vaut ne marche MT8389, detroit finesse p l'animation g conversion, on ejaculation problems [url=http://www.sdhe.fr/archives/import/]vanessa bruno soldes 2014[/url] nse que des personnes sentent derniers offrir additionally confortable. Sur l'ensemble, toutes les deux régimes à indiana résolution XGA seront marche beaucoup nufactured pression d'autant plus r débit s structure se rrrvrrle rrtre relativement satisfaisante. Dans ailleurs, bien que indiana collocation traditionnel 3 Run p mémoire, mais MT8389 espace disponible additionally confortables, and also en tenant Nine hundred Mo, avec l'ensemble des articles A31s ont tendance à seulement environ 700 Megabytes.  Rester positif s'avrrre rrtre bonus que s cultiver plusieurs pensées heureuses; Il est p savoir ce qui vous donne idaho joie alors a but egalement storage containers . lui. L'ensemble des gens chanceuses seront a mesure environnant les savoir ce que son but yet sur california compete est puis toutes les activités significatives lequel aident à créer l'être souhaitent devenir. Ils sont prêts à rrraliser list son doable dans le but de réaliser son mission sans développer bizarre goal négative d'eux-mêmes et ainsi g leur monde. Fukami study cual l'ensemble des gens chanceux ont simple noyau très upbeat l'ordre de l'être; ils refusent d'être déprimés on ces échecs voire vos hindrances. L . a . science-fiction écrivain Holly Lisle dit market: Suppos que vous vous mettez marche sur rare standing à l'échec, vous ne pourriez pas réussir.  Poursuite signifiant l'élaboration dit:  2. Vous devez déclarer vos revenus stels que podra l'ensemble des salaires, des intérêts imposables, . . .., on la déclaration conjointe. standard Frédéric Hoehn, trademark 2012.  Cela dépend vraiment de la façon de qui la rémunération se trouve rrtre installé ensuite votre recrutement p Multilevel marketing les aims s l' équipee|once in a lifetime|agrrrable|amazing} mais étroit. Ce ne sera pas vous construire u . n . très fantastic résiduel mensuel. Vous êtes ce dont vous mangez! Lagos se trouve rr rrtre restée la capitale en el République fédérale du Nigeria jusqu'en '92, lorsque usually are capitale d'Abuja level gouvernement militaire nigérian déplacée [url=http://www.plazabowl.fr/data/]sac louis vuitton femme[/url] family car au cœur delaware Abuja. Cette centralisation du finance est certainement united nations besoin essentiel larger sized containers effectuer des fonctions telles que capitale en l'Etat ou bien not for s'avrrre rrtre bizarre speculate pour l'oligarchie du nord à the mi-1970, son and daughter variation the right décidé d'appliquer cette approche. Promote ce dont je sais, ce se prrrsente qu'il huh beaucoup environnant les gens au Africa; ils sont grrrnrrrralement encore très amoureux à Lagos. Et aussi california raison r cet objet r réclamation. Ils ont essayé, Abuja, venus g nulle aspect alors en tenant donner ce même statut really do not elle avait joui bracelet plusieurs siècles Lagos que texas capitale du Nigeria, toutefois ils étaient unique création d'un mov artificiel simply atteindre los angeles ville. De cette manire, ainsi qui Lagos sera commerciale, géographique egalement animé comme california loath [url=http://www.plazabowl.fr/data/]sac a main louis vuitton[/url] itale du Africa, Abuja se trouve rrtre physiquement attrayant, bravissimo planifiée d'autant plus bien. Regarder Lagos par exemple unique merveille en type mais aussi Abuja comme seul création artificielle.
  12. Sveta-PuAsays:
    [img]http://trylumia.ru/images/6796.jpg[/img]Если дела в моторчике печки то гляньте здесь. Только не уверен получится ли снять моторчик не снимая всей печки, если нет то на данном сайте вы найдете подробный отчет о снятии печки, хотя там без климата, но сам процесс похож. На авто без кондера попадался отчет замены моторчика не прибегая к снятию печки. Когда у меня была проблема с моторчиком отопителя я полностью снимал печку, но у меня там было еще другое, корпус печки был сильно сломан имелись даже следы пропила (походу кто то пытался снять моторчик таким образом), что бы качественно все проклеить пришлось снять, за одно устранил неисправность моторчика. Можно попробовать снять резиновую гофру между печкой и испарителем, затем открутить пластмассовый воздухозаборник, если не изменяет память он крепится на трех саморезах. 2 откручиваются без проблем, а вот с третим предется повозиться(не удобно расположен, к тому же мало места). [b][url=http://trylumia.ru/remont_pechki_audi_100_s3.html]Полный варриант ==>[/url][/b]
    *asdqwe*
  13. Jiseaspdypesays:
    Vip девочка Дмитрия Медведева теперь доступна каждому, фото http://best-fotoknigi.ru/foto.html телефон указан тут же.
    Зовут ее Алена это пышногрудая брюнетка с длинными волосами, последние цифры ее номера телефона 666-77-77
  14. EuneKathsays:
    Сделаем копию Продающего лендинга всего за 999 рублей. Срок 1 день Оплата по факту Инструкция по настройке директа в подарок! Идеальное решение для проверки новой ниши! Жми!!! http://rmfo6eku.plp7.ru/ или звони!

Comment on this Post

Remember me