Безопасные операции в виде дерева C # - PullRequest
0 голосов
/ 14 января 2009

Я ищу информацию об использовании дерева в безопасном виде. Есть ли у кого-нибудь опыт с этим или известны какие-то онлайн-ссылки на исследования.

Спасибо

Ответы [ 2 ]

4 голосов
/ 14 января 2009

Из документации MSDN на System.Windows.Forms.TreeView :

Любая общедоступная статическая ( Общая в Visual Основные) члены этого типа являются потоками безопасный. Любые члены экземпляра не являются гарантированно безопасен для потоков.

К счастью для вас, в Windows Forms есть механизм для обработки элементов управления из нескольких потоков безопасным для потоков способом:

public delegate void TreeActionDelegate(WhatToDo details);

public void DoSomethingWithThisTree(WhatToDo details)
{
    // Assuming that 'this' points to a TreeView
    if (this.InvokeRequired) this.Invoke(new TreeActionDelegate(),
        new object[] { details });
    else
    {
        // The body of your function
    }
}

Теперь вы можете вызывать эту функцию из любого потока:

DoSomethingWithThisTree(new WhatToDo("something"));

Это гарантирует, что код, управляющий вашим деревом, будет выполняться в потоке, который создал TreeView, следовательно, он будет поточно-ориентированным. Если вы не хотите наследовать от TreeView, вы можете просто использовать treeInstance.InvokeRequired и treeInstance.Invoke().

0 голосов
/ 14 января 2009

Спасибо ...

строка "// тело вашей функции" дала мне толчок.

Я всегда соглашался с этим, просто передавая некоторую информацию объекту GUI этим методом ... Я никогда не думал помещать туда все тело функции

Спасибо

Бред

...