[ C# / Java ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by procedure, 2 Nov 2008.

  1. Niades

    Niades New Member

    Joined:
    30 Nov 2010
    Messages:
    28
    Likes Received:
    3
    Reputations:
    0
    Странный код читалки, ИМХО проще сделать так:
    PHP:
            public string readCfg()
            {
               
    // if (!(File.Exists("sql.ini"))) return null;
                
    using (StreamReader reader = new StreamReader("sql.ini"))
                {
                    return 
    reader.ReadToEnd().Trim();
                }
            }}
    Мне кажется проблема может быть в символах \r и/или \n в конце строки в файле, поэтому и не коннектится.
     
    #1041 Niades, 18 Aug 2011
    Last edited: 18 Aug 2011
  2. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    File.ReadAllText
     
    1 person likes this.
  3. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    C#

    Застрял на ошибке в многопоточности. Суть:
    Code:
    class Demo {
       private string GetContent() {
          //код
          return content;
       }
       public string GetUrl {
          string content=GetContent(); //и вот здесь вылазит ошибка, только в потоке System.AggregateException
          //код
          return url;
       }
    }
    class Form1 : Form {
       //...
       private void button1_Click(object sender, EventArgs e) {
       try {
             Demo obDemo=new Demo();
             //использую следующий вариант потому как нужно что бы задача
             //возвращала string
             Task<string> tsk1=Task<string>.Factory.StartNew(obUrl.GetUrl);
             richTextBox1.Text = tsk1.Result; //идём в класс который выше
             tsk1.Wait();
             tsk1.Dispose();
       }
             catch (IOException exc)
             {
                  MessageBox.Show(exc);
                  return;
             }
       }
    }
    
    Во общем я так понял что в методе который использует поток нельзя вызывать другой метод. Если так как я хочу не сделать, то подскажите как это всё побороть.
     
  4. Developer.C#

    Developer.C# New Member

    Joined:
    17 Aug 2011
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Ну, работает, же.
     
  5. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    Короче то была ошибка не в самом организации потока, а именно в тех действиях которые происходили в этом потоке... но как то тупо что оно выдаёт ошибку AggregateException если например в моём случае в методе была ошибка URIException, это только затрудняет отладку.
     
  6. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    PHP:
    string s textBox1.Text;
                
    string v s.Replace("[TEXT1]""TEXT1");
                
    string v s.Replace("[TEXT2]""TEXT2");
                
    string v s.Replace("[TEXT3]""TEXT3");
                 
    string v s.Replace("[TEXT4]""TEXT4");;
                
    textBox2.Text v;
    всем привет,как сделать так чтоб Replace выводилось на textBox2

    тоесть на textBox1 пишу [TEXT3] а на textBox2 TEXT3 итд...

    зарания спасибо...
     
  7. inCode

    inCode Member

    Joined:
    20 Jun 2011
    Messages:
    141
    Likes Received:
    22
    Reputations:
    5
    если я тебя правильно понял, то ошибка в том, что ты постоянно делаешь перепресвоение переменной.
    Хотя лучше сделать в цыкле меньше кода и более гибкое или че-нить другое придумать зависит от задачи)
     
    #1047 inCode, 19 Aug 2011
    Last edited: 19 Aug 2011
  8. Niades

    Niades New Member

    Joined:
    30 Nov 2010
    Messages:
    28
    Likes Received:
    3
    Reputations:
    0

    Всё правильно вроде, только не надо каждый раз объявлять переменную, то есть писать нужно не "string v = s.Replace...", а просто "v = s.Replace..."
     
  9. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    Niades так он печатает саму textbox1...

    актуально...
     
  10. inCode

    inCode Member

    Joined:
    20 Jun 2011
    Messages:
    141
    Likes Received:
    22
    Reputations:
    5
    Code:
          string s = textBox1.Text; 
                string v1 = s.Replace("[TEXT1]", "TEXT1"); 
                string v2 = v1.Replace("[TEXT2]", "TEXT2"); 
                v1 = v2.Replace("[TEXT3]", "TEXT3"); 
                v2 = v1.Replace("[TEXT4]","TEXT4");
                textBox2.Text = v2; 
    так, что ли?:О
     
  11. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    нет...
     
  12. inCode

    inCode Member

    Joined:
    20 Jun 2011
    Messages:
    141
    Likes Received:
    22
    Reputations:
    5
    Replace это метод переменной.
    Code:
    string s = textBox1.Text; 
                string v = s.Replace("[", ""); 
                s = v.Replace("]","");
                textBox2.Text = s; 
    если не так, пиши в асю 5544433 помогу)
     
  13. Niades

    Niades New Member

    Joined:
    30 Nov 2010
    Messages:
    28
    Likes Received:
    3
    Reputations:
    0
    Честно говоря, я не понял, что ты хочешь сделать, но вроде так должно работать:

    PHP:
    string s textBox1.Text;
                
    string v s.Replace("[TEXT1]""TEXT1");
                
    v.Replace("[TEXT2]""TEXT2");
                
    v.Replace("[TEXT3]""TEXT3");
                
    v.Replace("[TEXT4]""TEXT4");;
                
    textBox2.Text v;
    Если в tb1 будет [TEXT1][TEXT2][TEXT3][TEXT4], то в tb2 TEXT1TEXT2TEXT3TEXT4
     
    1 person likes this.
  14. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    спасибо.. у меня таких v = v.Replace("[TEXT4]", "TEXT4"); 40 штук будет,это норм? Оо
     
    #1054 Nelz., 19 Aug 2011
    Last edited: 19 Aug 2011
  15. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Воспользуйся, например, регулярками, чтобы не было 40 штук
    http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace%28v=vs.71%29.aspx

    Или заменяй только [, ], если текст состоит только из подобных конструкций
     
    _________________________
    1 person likes this.
  16. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    C#

    Простой пример из книги.
    Code:
            private void button1_Click(object sender, EventArgs e)
            {
                Task tsk = Task.Factory.StartNew(() =>
                {
                    for (int i = 0; i < 10; i++)
                    {
                        Thread.Sleep(500);
                        label1.Text = Task.CurrentId.ToString() + " " i.ToString();
                    }
                }
                );
                tsk.Wait(); //System.AggregateException
                tsk.Dispose();
                label1.Text += " The end";
            }
    
    Вопрос: Почему в ожидании выдает ошибку System.AggregateException;
     
  17. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    return
    AggregateException - Представляет одну или несколько ошибок, происходящих во время выполнения приложения.

    В сведениях об исключении смотрим свойство InnerException - Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан.

    Что, в общем-то, очевидно.
     
  18. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    X-rus спс, не знал что порожденные потоки не имеют доступа к элементам формы. Полистал гугл и нашел решения.

    Ну и ещё один нубовский вопрос: Почему когда создаю отдельный поток, и этот поток выполняет какие то действия на форме, то форма в этот момент зависает и неактивна? Мне казалось что использование потоков наоборот исправит этот дефект.
     
  19. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    return
    Проблема в том, что ты ожидаешь завершение своего потока в главном потоке приложения, в результате форма блокируется - tsk.Wait();

    Посмотри класс - BackgroundWorker. Хороший выбор для оконного приложения.
     
    1 person likes this.
  20. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Никак не могу выбрать шаблон под среднего размера проекты на c# на wpf. Что посоветуете и желательно с сылкой на пример(подробный). По vmmv что-то не густо примеров...
     
Loading...
Similar Threads - Java начинающим задаем
  1. b3
    Replies:
    4
    Views:
    3,216