Старый 09.10.2010, 22:37   #11
rsaReliableS
 
Регистрация: 29.07.2010
Сообщений: 36
Репутация: 7
По умолчанию

Цитата:
Сообщение от SeNaP Посмотреть сообщение
А как быть с функциями, которые возвращают значение , например string? Как их включить в поток?
Давно еще, когда только знакомился с .Net тоже был такой вопрос, читать маны тогда было влом и я не нашел ничего лучше как юзать глобальные переменные.
Но создавать переменную для каждого потока - <плохое_слово>, поэтому в основном я использую списки, или очередь =)
rsaReliableS вне форума   Ответить с цитированием
Старый 15.02.2011, 22:00   #12
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

И это опять я
PHP код:
 void GetLogins()
        {
            for (
int i 1<= 5583i++)
            {
                
result RequestGet("http://site.ru/forum/profile" i.ToString());
                
MatchCollection matches Regex.Matches(result"(?<=Профиль).+(?=</div>)");
                foreach (
Match match in matches)
                {
                  
                    
Invoke(new MethodInvoker(resultlog), match.Value);
                                                         
                }
                          
            }
        }
        
/****************Пишем лог в потоке*********************************************/
        
void resultlog(object arg)
        {

            
Form2.textBox1.AppendText(arg.ToString() + "\r\n");
        }

        
/*****************************************************************************/
        
private void button1_Click(object senderEventArgs e)
        {
           
            
                (new 
Thread(new ThreadStart(GetLogins))).Start();
            
        } 
Если создавать , например, 10 потоков, то каждый поток начинает выполнять одно и тоже, как бэ синхронизации нет.
Пытался сделать синхронизацию через Lock(), ну так и нечего не вышло.
......толи лыжи не едут.
Подскажите как можно сделать через lock, или может существуют еще какие нибудь методы?
SeNaP вне форума   Ответить с цитированием
Старый 16.02.2011, 21:49   #13
Cross
 
Регистрация: 27.08.2010
Сообщений: 114
Репутация: 2
По умолчанию

ё моё, ты 5583 раз создаешь объект MatchCollection, это же вообще трындец!! Задай его 1 раз глобально! Один хрен регулярка статическая!!
Твой код воистину жесток...держи eggheadcafe.com/articles/20020224.asp
Cross вне форума   Ответить с цитированием
Старый 17.02.2011, 18:23   #14
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

Не могу понять, почему я не могу обратиться из класса Core через делегат к методу resultlog(), а в классе Form1 работает нормально
PHP код:
public class Core Form
    
{
        
delegate void MethodInvoker(object arg);

        public 
void GetLogins()
        {
                   
NickMatches Regex.Match(result"(?<=Имя).+(?=</span>)");
                  
Invoke(new MethodInvoker(resultlog), NickMatches.Value);
                   
        }
         public 
void resultlog(object arg)
        {
                   
MessageBox.Show("Ok");
        } 
PHP код:
public partial class Form1 Form
    
{
        
Core Core = new Core();
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void button1_Click(object senderEventArgs e)
        {
                 (new 
Thread(new ThreadStart(Core.GetLogins))).Start();
                 
        } 
Компилится без ошибок, но потом при нажатии на кнопку
Код:
Невозможно вызвать Invoke или BeginInvoke для элемента управления до завершения создания дескриптора окна.
SeNaP вне форума   Ответить с цитированием
Старый 18.02.2011, 08:39   #15
W!z@rD
 
Аватар для W!z@rD
 
Регистрация: 04.07.2010
Сообщений: 33
Репутация: 15
По умолчанию

void Method1()
{
if (InvokeRequred)
{
BeginInvoke(... => Method1());
}
else
{
textBox1.Text = "a";
}
}

delegate void MethodInvoker(object arg);
это тебе вообще не нужно

Последний раз редактировалось W!z@rD; 18.02.2011 в 08:53..
W!z@rD вне форума   Ответить с цитированием
Старый 18.02.2011, 09:01   #16
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

Т.е. получается Method1() это в моём случаи resultlog()?
И не понятно еще вот это
Код:
BeginInvoke(... => Method1());
Это же ведь делегат ?
SeNaP вне форума   Ответить с цитированием
Старый 18.02.2011, 09:16   #17
W!z@rD
 
Аватар для W!z@rD
 
Регистрация: 04.07.2010
Сообщений: 33
Репутация: 15
По умолчанию

public void resultlog(string a);
if (InvokeRequired)
{
BeginInvoke(new MethodInvoker(() => resultlog(a)));
}
else
{
MessageBox.Show(a);
}

почитай как обращаться к элементам управления из другого потока


поправка выше, MethodInvoker тебе самостоятельно описывать не надо
W!z@rD вне форума   Ответить с цитированием
Старый 13.03.2011, 16:23   #18
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

Вопрос про WPF.
Есть treeView
PHP код:
<TreeView Height="414" HorizontalAlignment="Left" Margin="-6,-2,0,0" Name="treeView1" VerticalAlignment="Top" Width="142" Padding="0">
            <
TreeViewItem Header="site.ru">
                <
TreeViewItem Header="site1.ru" />
                <
TreeViewItem Header="site2.ru" />
            </
TreeViewItem>
        </
TreeView
Как добавить site3.ru , чтобы родитель был site.ru?
Пытался так
PHP код:

        
private void button1_Click(object senderRoutedEventArgs e)
        {
            
TreeViewItem newChild = new TreeViewItem();

            
newChild.Header textBox1.Text;

            
treeView1.Items.Add(newChild);
        } 
В итоге создается новый узел (
SeNaP вне форума   Ответить с цитированием
Старый 14.03.2011, 07:16   #19
W!z@rD
 
Аватар для W!z@rD
 
Регистрация: 04.07.2010
Сообщений: 33
Репутация: 15
По умолчанию

зачем создавать контролы динамически?
Когда намного проще
1) Описать все заранее в xaml
2) сделать Binding на ObservableCollection<T>
??
W!z@rD вне форума   Ответить с цитированием
Старый 14.03.2011, 18:27   #20
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

Цитата:
Сообщение от W!z@rD Посмотреть сообщение
зачем создавать контролы динамически?
Когда намного проще
1) Описать все заранее в xaml
2) сделать Binding на ObservableCollection<T>
??
Спасибо И еще вопрос, например пусть будет такое же дерево в C# . Как сделать , что бы при клики на site2.ru, label'y присвоилось значение , например, 'Это site2' ?
SeNaP вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot