2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Помогите решыть проблему!
Сообщение12.12.2011, 22:44 
Здравствуйте! Перейду сразу к делу. Есть у нас MDI-контейнер. У нево эсть дочерные форми. Вот код дочерных форм
Код:
using System;
...

namespace laba4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        { }
        public void func()
        {
            FolderBrowserDialog myFolderDialog = new FolderBrowserDialog();
            if (myFolderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                String sPath = myFolderDialog.SelectedPath.ToString();
                MessageBox.Show(sPath);
                recursiwalk.recursivwalk(sPath);
            }   
        }
        private void button1_Click(object sender, EventArgs e)
        {
            new Thread(func).Start();
            //func();
        }
    }
}

В форме есть кнопка при нажатии которой в потоке должна исполнятся функия func. Проблема заключаєтся в этом что когда функция исполняется в потоке то FolderBrowserDialog пуст и нету из чево вибирать. Но если запустить funk просто так то все ок. Помечу так? Помогите разобратяс в чем я ошибся.

 
 
 
 Re: Помогите решыть проблему!
Сообщение12.12.2011, 23:24 
К управляющим элементам Windows.Forms можно обращаться только из потока, в котором они были созданы. Если возникает необходимость работать с контролом из другого потока, необходимо использовать метод Invoke.

Вот здесь почитайте: How to: Make Thread-Safe Calls to Windows Forms Controls (MSDN).

 
 
 
 Re: Помогите решыть проблему!
Сообщение12.12.2011, 23:28 
Спасибо!
З.Ы. здесь на форуме можна как-то плюсануть?

 
 
 
 Re: Помогите решыть проблему!
Сообщение12.12.2011, 23:31 
Нет, здесь достаточно сказать "спасибо" :)

 
 
 
 Re: Помогите решыть проблему!
Сообщение13.12.2011, 15:06 
У меня тут еше один вопрос назрел. Вот хочу я зделать чтоб контроль ListView отображал содержание папки или диска. Путь к этой папке мы выбираем сами. Как зделать так чтоб около назв папок отображалась иконка папки(походу читал что ListView исполюзуется у Експлорере, значит это както возможно) а около назв файлов какая-то другая иконка?

 
 
 
 Re: Помогите решыть проблему!
Сообщение13.12.2011, 16:42 
Картинки для каждого узла TreeView можно задать в конструкторе: TreeNode Constructor (String, Int32, Int32)

Ну и сюда загляните для общего образования: Walkthrough: Creating an Explorer Style Interface with the ListView and TreeView Controls Using the Designer

 
 
 
 Re: Помогите решыть проблему!
Сообщение29.12.2011, 21:15 
Кстати, а зачем вообще нужен дополнительный поток в первом вопросе?
Если только для вызова recursiwalk.recursivwalk, то гораздо проще открыть FolderBrowserDialog в основном потоке, а в новый поток передать только sPath и не заморачиваться с Invoke.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group