Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> saveFileDialog и потоки, проблема с saveFileDialog  
:(
    Опции темы
i2m
Дата 21.6.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 4.5.2010

Репутация: нет
Всего: 1



Здравствуйте, проблема в следующем, на главной форме есть backgroundwoker через который запускается функцию, в этой функции создается новая форма, в которой вызывается контрол  saveFileDialog, и получается что при вызове контрола зависает приложение в чем может быть причина? и как ее можно решить? Если запускать функцию без отдельного потока то все работает.



Код

        private void BackgroundWorker2_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            Updates.CheckUpdate();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            BackgroundWorker2.RunWorkerAsync();
        }


Код

        private const string XmlUrl = "http://*****/app_version.xml";

        public static void CheckUpdate()
        {
            var ver = GetServerAppVer();

            if (Assembly.GetExecutingAssembly().GetName().Version.CompareTo(ver) < 0)
            {
                if (DialogResult.Yes == MessageBox.Show(
                    string.Format("Доступна новая версия.\r\nЗагрузить обновленную версию сейчас?\r\n\r\nВерсия: {0}", ver),
                    "Проверка обновлений", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
                {
                    var form2 = new Form2();
                    form2.ShowDialog();
                }
            }
        }


Код

        private void Form2_Load(object sender, EventArgs e)
        {
            var dialogSave = new SaveFileDialog()
            
            dialogSave.DefaultExt = "txt";
            dialogSave.Filter = "Text file (*.txt)|*.txt|XML file (*.xml)|*.xml|All files (*.*)|*.*";
            dialogSave.AddExtension = true;
            dialogSave.RestoreDirectory = true;
            dialogSave.Title = "Where do you want to save the file?";
            dialogSave.InitialDirectory = @"C:/";

            if (dialogSave.ShowDialog() == DialogResult.OK)
            {
                .....
            }
        }


Это сообщение отредактировал(а) i2m - 21.6.2010, 13:47
PM MAIL   Вверх
i2m
Дата 22.6.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 4.5.2010

Репутация: нет
Всего: 1



Так что не кто не сталкивался с таким? В IntelliTrace показывает что Невозможно вычислить выражение, поскольку фрейм машинного кода находится на вершине стека вызовов. Искал на эту тему, но не чего толкового не нашел.

PM MAIL   Вверх
i2m
Дата 22.6.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 4.5.2010

Репутация: нет
Всего: 1



Поэкспериментировал,  ошибка возникает просто из-за того что диалог запускается в отдельном потоке, ну не бред ли?

Код

        private void Form1_Load(object sender, EventArgs e)
        {
            BackgroundWorker2.RunWorkerAsync();
        }

        private void BackgroundWorker2_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            var sfd = new SaveFileDialog();
            sfd.ShowDialog();
        }


PM MAIL   Вверх
Rohoss
Дата 22.6.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



i2m, вы обращаетесь к форме из другого потока?


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
i2m
Дата 22.6.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 4.5.2010

Репутация: нет
Всего: 1



Rohoss, Нет, сама форма запускается в другом потоке, ну это как я понял не играет роли тут роли, я выше привел пример если вызвать диалог просто в главной форме из другого потока то происходит зависание.

Это сообщение отредактировал(а) i2m - 22.6.2010, 15:32
PM MAIL   Вверх
Rohoss
Дата 22.6.2010, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



насколько я помню, winform платформа однопоточная...


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.