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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BackgroundWorker не работает на другом ПК, BackgroundWorker->RunWorkerAsync(); 
V
    Опции темы
Gluttton
Дата 24.4.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


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

Репутация: 2
Всего: 54



Доброго времени суток!

Суть проблемы: пишу FindowsForms приложение на C++\CLR использую компонент BackgroundWorker.
На том ПК на котором пишу программу приложение работает, а на работе BackgroundWorker->RunWorkerAsync();, как бы "проходит мимо".

Код

private: System::Void btnConnect_Click(System::Object^  sender, System::EventArgs^  e) {
    bkgWorker->RunWorkerAsync();
}


Код

private: System::Void bkgWorker_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
    MessageBox::Show("bkgWorker_DoWork started!");
}


Дома я получаю сообщение, а на работе нет, хотя всё остальное работает.

Буду признателен за любую помощь.


Вопрос решен!

Это сообщение отредактировал(а) Gluttton - 24.4.2009, 14:34


--------------------
Слава Україні!
PM MAIL   Вверх
Sniper_super
Дата 30.4.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Возможно нужно сбилдать как релиз а не debug
PM MAIL   Вверх
Gluttton
Дата 30.4.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


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

Репутация: 2
Всего: 54



Спасибо, за то что откликнулись, но 
Цитата

Вопрос решен!


 smile  .

Цитата

Возможно нужно сбилдать как релиз а не debug


Через это я уже прошел smile , там было всё намного проще - просто программа не запускалась.

А ситуация оказалась в следующем:

Приведенный мною выше код я несколько упростил и написал:
Код

private: System::Void bkgWorker_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
    MessageBox::Show("bkgWorker_DoWork started!");

}


А на самом деле, далее в теле bkgWorker_DoWork я пытаюсь подключиться к БД (Firebird 2.1) используя .NET provider. Что то вроде такого:
Код

private: System::Void bkgWorker_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
    MessageBox::Show("bkgWorker_DoWork started!");
    BackgroundWorker^ bkgWorker=dynamic_cast<BackgroundWorker^>(sender);
        bkgWorker->ReportProgress(10);
        FbConnectionStringBuilder^ builder=gcnew FbConnectionStringBuilder();
        builder["DataSource"]="127.0.0.1";
        builder["UserID"]="SYSDBA";
        builder["Password"]="masterkey";
        builder["Database"]=ChFrm->getTextBoxPath();
        builder["Port"]=3050;
        builder["Charset"]="WIN1251";
        builder["Pooling"]=true;
        builder["ConnectionTimeout"]=15;
        builder["ServerType"]="1";
        builder["Dialect"]=3;
        bkgWorker->ReportProgress(20);
        FbConnection^ connection=gcnew FbConnection(builder->ConnectionString);                 
        StreamReader^ sr;
        System::String^ queryString;
        try {
            sr=gcnew StreamReader(Environment::GetFolderPath(Environment::SpecialFolder::ProgramFiles)+"\\MapBuilder\\Scripts\\current.sql");
            queryString=sr->ReadToEnd();
            sr->Close();
        }
        catch(Exception^ e) {
            String^ message="Ошибка чтения запроса из файла:"+e->Message;
            String^ caption="Ошибка!";
            MessageBoxButtons buttons=MessageBoxButtons::OK;
            MessageBoxIcon icon=MessageBoxIcon::Error;
            System::Windows::Forms::MessageBox::Show(message, caption, buttons, icon);
            sr->Close();
        }
        bkgWorker->ReportProgress(30);
        FbCommand^ command=gcnew FbCommand(queryString, connection);                
        try {
            bkgWorker->ReportProgress(40);
            connection->Open();                         
            FbTransaction^ trn=connection->BeginTransaction();
            command->CommandType=CommandType::StoredProcedure;
            command->Transaction::set(trn);
            bkgWorker->ReportProgress(80);
            String^ result=Convert::ToString(command->ExecuteScalar());
            bkgWorker->ReportProgress(90);
            connection->Close();
            bkgWorker->ReportProgress(100);
        }
        catch(FbException^ e) {
            FbErrorCollection^ errors=e->Errors;
            bkgWorker->ReportProgress(0);
            connection->Close();
        }
}


При этом я не обрабатывал ошибку, которая может возникнуть в результате отсутствия NET Provider'ской библиотеки.

Так же я предпологал, что если и должна возникнуть ошибка внутри тела обработчика, то MessageBox я получаю по любому, т.к. он первый.

А ответ оказался таким. На другой машине, где я запускал программу не было *.dll с NET Provider'скими библиотеками, но вместо того, что бы "упасть" программа работала, не выдавая ни каких сообщений об ошибках. При этом backgrowndWorker_doWork вообще не создавался и не запускался (ошибок не выдавал)!

Проблему решил, так: добавил нужную *.dll'ку smile и поставил обработчик на код создающий объкты класса FbConnection и ему подобных.



--------------------
Слава Україні!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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