Meilleur auteur de réponses
le backgroundWorker présent ou pas

Question
-
Je suis toujours à rechercher une solution pour les désallocations de mémoire.
J'ai essayé de créer deux thread qui se succéderaient.
J'ai donc créer deux backgroundWorker; Je vous met ci-dessous la déclaration.
public: MainMenue::MainMenue(void); System::ComponentModel::BackgroundWorker^ backgroundWorker1; System::ComponentModel::BackgroundWorker^ backgroundWorker2;
et j'ai reproduit l'appel du premier dans WordManager. Je donne ci dessous le code:
backgroundWorker1->ReportProgress( ProgressPercentage); objVirtualEquations.CheckVirtualEquations( pListSegment); CloseDocument( backgroundWorker1, objApplication, objDocument, objDocuments); objSchedulerGlobal.ClearListGrammaire( pListSegment); backgroundWorker2->ReportProgress( ProgressPercentage);
mais le compilateur me dit qu'il ne trouve pas backgroundWordker2
1>..\..\..\..\Linguistic\WordReader\src\WordManager.cpp(361): error C2065: 'backgroundWorker2' : identificateur non déclaré 1>..\..\..\..\Linguistic\WordReader\src\WordManager.cpp(361): error C2227: la partie gauche de '->ReportProgress' doit pointer vers un type class/struct/union/générique 1> le type est ''unknown-type''
Comment faire pour qu'il le trouve?
Jean Noël Martin
Réponses
-
J'essaye toutes les pistes sur la base des comportements que j'ai observé:
- Je sais que je désalloue les ressources en fin de 1° phase;
- Je sais que je peux enchainer six itérations du programme sans l’arrêter.
De ces deux observations je conclue que les désallocations se passent bien.
- J'ai observé que le tas est toujours alloué après les désallocations;
- Mais lorsqu'on met l'observatoire du tas dans le main il n'y a rien d'alloué.
J'ai donc supprimé le deuxième backgroundWorker
Pour cela j'ai organisé la remonté de l’observatoire du tas dans le MainMenue:
Pour suivre votre demande je met cette classe à votre disposition ainsi que sa déclaration.la déclaration
#pragma once namespace SpecificationLoader { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace Word = Microsoft::Office::Interop::Word; /// Description résumée de MainMenue public ref class MainMenue : public System::Windows::Forms::Form { public: MainMenue::MainMenue(void); System::ComponentModel::BackgroundWorker^ backgroundWorker1; static SpecificationLoader::CWManager^ objWordManager; private: System::Windows::Forms::Label^ label1; System::Windows::Forms::Label^ label2; System::Windows::Forms::Label^ label3; System::Windows::Forms::Label^ label4; System::Windows::Forms::Label^ label6; System::Windows::Forms::Label^ label7; protected: /// Nettoyage des ressources utilisées. MainMenue::~MainMenue(); private: int numberToCompute; int highestPercentageReached; System::Windows::Forms::MenuStrip^ menuStrip1; System::Windows::Forms::ToolStripMenuItem^ filesToolStripMenuItem; System::Windows::Forms::ToolStripMenuItem^ openAFileToolStripMenuItem; System::Windows::Forms::ToolStripMenuItem^ exitToolStripMenuItem; System::Windows::Forms::ToolStripMenuItem^ helpToolStripMenuItem; System::Windows::Forms::Label^ ResultLabel; System::Windows::Forms::ProgressBar^ progressBar1; System::ComponentModel::Container ^components; void MainMenue::InitializeComponent(void); System::Void MainMenue::openAFileToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); System::Void MainMenue::exitToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); System::Void MainMenue::helpToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); void MainMenue::InitializeProgressBar(); void MainMenue::Form1_Shown( System::Object^ sender, System::EventArgs^ e); void MainMenue::backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e); System::Void MainMenue::backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e); void MainMenue::backgroundWorker2_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e); System::Void MainMenue::backgroundWorker2_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e); private: System::Void oadingSpecification(System::Object^ sender, System::EventArgs^ e) { } }; }
et le bloc de code avec les observatoires
#pragma managed #include "StdAfx.h" #include "Macro.h" #include "AlignStructure.h" #include "Enumerations.hpp" #include "Structure.h" #include "TypeDefs.hpp" #include "POS.h" #include "Layout.h" #include "ClassesAligner.hpp" #include "LinkDescription.h" #include "Manager.h" #include "Aligner.h" #include "WordManager.h" #include "OpenAFile.h" #include "MainMenue.h" extern std::wstring wsFileToOpen; extern std::wstring wsPathOfTheFile; extern std::wstring wsDiskOfTheFile; extern std::wstring wsLanguage; extern std::wstring wsTypeDocument; extern std::wstring wsDatabaseName; extern std::wstring wsDatabaseFileName; extern int nParagraph; extern int iSize; struct _CrtMemState Heap; unsigned long ulCounts; unsigned long ulSizes; unsigned long ulCount; unsigned long ulSize; unsigned long ulTotal; namespace SpecificationLoader { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Threading; using namespace System::DirectoryServices; namespace Word = Microsoft::Office::Interop::Word; bool bIsDbConnected; erc ulDocSize; bool bNewDoc = false; erc ulTotalNbWords; MainMenue::MainMenue(void) { int i; for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; Console::WriteLine("Constructeur MainMenue"); MainMenue::InitializeComponent(); // //TODO: ajoutez ici le code du constructeur // MainMenue::InitializeProgressBar(); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; progressBar1->Visible = false; bIsDbConnected = false; } MainMenue::~MainMenue() { if (components) { delete components; } } #pragma region Windows Form Designer generated code /// <summary> /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas /// le contenu de cette méthode avec l'éditeur de code. /// </summary> void MainMenue::InitializeComponent(void) { this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip()); this->filesToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->openAFileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->helpToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->progressBar1 = (gcnew System::Windows::Forms::ProgressBar()); this->backgroundWorker1 = (gcnew System::ComponentModel::BackgroundWorker()); this->ResultLabel = (gcnew System::Windows::Forms::Label()); this->label1 = (gcnew System::Windows::Forms::Label()); this->label2 = (gcnew System::Windows::Forms::Label()); this->label3 = (gcnew System::Windows::Forms::Label()); this->label4 = (gcnew System::Windows::Forms::Label()); this->label6 = (gcnew System::Windows::Forms::Label()); this->label7 = (gcnew System::Windows::Forms::Label()); this->menuStrip1->SuspendLayout(); this->SuspendLayout(); // // menuStrip1 // this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->filesToolStripMenuItem, this->helpToolStripMenuItem}); this->menuStrip1->Location = System::Drawing::Point(0, 0); this->menuStrip1->Name = L"menuStrip1"; this->menuStrip1->Size = System::Drawing::Size(1018, 24); this->menuStrip1->TabIndex = 0; this->menuStrip1->Text = L"menuStrip1"; // // filesToolStripMenuItem // this->filesToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->openAFileToolStripMenuItem, this->exitToolStripMenuItem}); this->filesToolStripMenuItem->Name = L"filesToolStripMenuItem"; this->filesToolStripMenuItem->Size = System::Drawing::Size(40, 20); this->filesToolStripMenuItem->Text = L"Files"; // // openAFileToolStripMenuItem // this->openAFileToolStripMenuItem->Name = L"openAFileToolStripMenuItem"; this->openAFileToolStripMenuItem->Size = System::Drawing::Size(137, 22); this->openAFileToolStripMenuItem->Text = L"Open a file"; this->openAFileToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::openAFileToolStripMenuItem_Click); // // exitToolStripMenuItem // this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem"; this->exitToolStripMenuItem->Size = System::Drawing::Size(137, 22); this->exitToolStripMenuItem->Text = L"Exit"; this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::exitToolStripMenuItem_Click); // // helpToolStripMenuItem // this->helpToolStripMenuItem->Name = L"helpToolStripMenuItem"; this->helpToolStripMenuItem->Size = System::Drawing::Size(40, 20); this->helpToolStripMenuItem->Text = L"Help"; this->helpToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::helpToolStripMenuItem_Click); // // progressBar1 // this->progressBar1->Location = System::Drawing::Point(36, 116); this->progressBar1->Name = L"progressBar1"; this->progressBar1->Size = System::Drawing::Size(927, 19); this->progressBar1->TabIndex = 1; // // ResultLabel // this->ResultLabel->AutoSize = true; this->ResultLabel->Location = System::Drawing::Point(66, 418); this->ResultLabel->Name = L"ResultLabel"; this->ResultLabel->Size = System::Drawing::Size(0, 13); this->ResultLabel->TabIndex = 2; // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(761, 418); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(0, 13); this->label1->TabIndex = 3; // // label2 // this->label2->AutoSize = true; this->label2->Location = System::Drawing::Point(509, 233); this->label2->Name = L"label2"; this->label2->Size = System::Drawing::Size(0, 13); this->label2->TabIndex = 4; // // label3 // this->label3->AutoSize = true; this->label3->Location = System::Drawing::Point(432, 418); this->label3->Name = L"label3"; this->label3->Size = System::Drawing::Size(0, 13); this->label3->TabIndex = 5; // // label4 // this->label4->AutoSize = true; this->label4->Location = System::Drawing::Point(41, 88); this->label4->Name = L"label4"; this->label4->Size = System::Drawing::Size(0, 13); this->label4->TabIndex = 6; // // label6 // this->label6->AutoSize = true; this->label6->Location = System::Drawing::Point(36, 154); this->label6->Name = L"label6"; this->label6->Size = System::Drawing::Size(0, 13); this->label6->TabIndex = 8; // // label7 // this->label7->AutoSize = true; this->label7->Location = System::Drawing::Point(216, 154); this->label7->Name = L"label7"; this->label7->Size = System::Drawing::Size(0, 13); this->label7->TabIndex = 9; // // MainMenue // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(1018, 479); this->Controls->Add(this->label7); this->Controls->Add(this->label6); this->Controls->Add(this->label4); this->Controls->Add(this->label3); this->Controls->Add(this->label2); this->Controls->Add(this->label1); this->Controls->Add(this->ResultLabel); this->Controls->Add(this->progressBar1); this->Controls->Add(this->menuStrip1); this->MainMenuStrip = this->menuStrip1; this->Name = L"MainMenue"; this->Text = L"MainMenue"; this->menuStrip1->ResumeLayout(false); this->menuStrip1->PerformLayout(); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion System::Void MainMenue::openAFileToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { int i; OpenAFile^ newWindow = gcnew OpenAFile( this); newWindow->ShowDialog(); progressBar1->Visible = true; // c'est ici qu'on démarre l'aligner. // erc CAligner::AlignDocumentsPairs(bool bMMIMode, std::wstring sSourceFileName, std::wstring sDocType, std::wstring *sDatabaseType, std::wstring *sDatabaseFileName); bIsDbConnected = SpecificationLoader::objAligner.InitiateDbTransaction( wsDiskOfTheFile + wsPathOfTheFile + wsFileToOpen, bIsDbConnected, bNewDoc, wsTypeDocument, &wsDatabaseName, &wsDatabaseFileName); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; objWordManager = gcnew SpecificationLoader::CWManager; objWordManager->StartWordApi(); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; ulDocSize = objWordManager->OpenWordDocument( wsDiskOfTheFile + wsPathOfTheFile + wsFileToOpen); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; backgroundWorker1->RunWorkerAsync(); } System::Void MainMenue::exitToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { objAligner.CloseDBTransaction(); this->Close(); } System::Void MainMenue::helpToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { } void MainMenue::InitializeProgressBar() { Shown += gcnew EventHandler( this, &MainMenue::Form1_Shown); // To report progress from the background worker we need to set this property backgroundWorker1->WorkerReportsProgress = true; // This event will be raised when we call ReportProgress backgroundWorker1->ProgressChanged += gcnew ProgressChangedEventHandler( this, &MainMenue::backgroundWorker1_ProgressChanged); backgroundWorker1->DoWork += gcnew DoWorkEventHandler( this, &MainMenue::backgroundWorker1_DoWork ); } void MainMenue::Form1_Shown( System::Object^ sender, System::EventArgs^ e) { // Start the background worker progressBar1->Visible = false; } // Back on the 'UI' thread so we can update the progress bar void MainMenue::backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e) { System::String^ msg; // The progress percentage is a property of e progressBar1->Value = e->ProgressPercentage; msg = L"Progress is " + e->ProgressPercentage + L"%"; ResultLabel->Text = msg; msg = L"Paragraph progress is: " + nParagraph; label1->Text = msg; msg = L"Number of Word processed is: " + ulTotalNbWords; label3->Text = msg; msg = L"Specification loading Process"; } // Back on the 'UI' thread so we can update the progress bar void MainMenue::backgroundWorker2_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e) { System::String^ msg; label4->Text = msg; if( e->ProgressPercentage == 100) label6->Text = L"Start of the Coherence assertion step"; if (iSize > 0) { msg = L"Number of Semantic Element Loaded: " + iSize + L" Elements"; label7->Text = msg; } } System::Void MainMenue::backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) { // The progress percentage is a property of e // This event handler is where the actual, // potentially time-consuming work is done. // Get the BackgroundWorker that raised this event. int i; for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender); // C'est ici qu'on démarre l'anlyse en tâche de fond. objWordManager->StartDocAnalysis( backgroundWorker1, ulDocSize, bNewDoc); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; objSoftwareManager.Termination(); objWordManager->StartCoherenceAssertion( backgroundWorker1, ulDocSize); } }
Jean Noël Martin
- Modifié JeanNoel53 jeudi 31 octobre 2013 09:58
- Marqué comme réponse JeanNoel53 jeudi 31 octobre 2013 09:58
Toutes les réponses
-
Bonjour,
Je suis toujours à rechercher une solution pour les désallocations de mémoire.
J'ai essayé de créer deux thread qui se succéderaient.
Vous essayez de désallouer des objets dans vos 2 threads ? Je ne comprends pas ce que vous recherchez à faire exactement... Pouvez-vous nous expliquer votre problématique ?Est-il possible de voir le code complet .cpp et .h de la classe qui contient vos backgroundWorker ? Car il est difficile de voir d'où vient le problème...
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCSA : SQL Server 2012
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure -
J'essaye toutes les pistes sur la base des comportements que j'ai observé:
- Je sais que je désalloue les ressources en fin de 1° phase;
- Je sais que je peux enchainer six itérations du programme sans l’arrêter.
De ces deux observations je conclue que les désallocations se passent bien.
- J'ai observé que le tas est toujours alloué après les désallocations;
- Mais lorsqu'on met l'observatoire du tas dans le main il n'y a rien d'alloué.
J'ai donc supprimé le deuxième backgroundWorker
Pour cela j'ai organisé la remonté de l’observatoire du tas dans le MainMenue:
Pour suivre votre demande je met cette classe à votre disposition ainsi que sa déclaration.la déclaration
#pragma once namespace SpecificationLoader { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace Word = Microsoft::Office::Interop::Word; /// Description résumée de MainMenue public ref class MainMenue : public System::Windows::Forms::Form { public: MainMenue::MainMenue(void); System::ComponentModel::BackgroundWorker^ backgroundWorker1; static SpecificationLoader::CWManager^ objWordManager; private: System::Windows::Forms::Label^ label1; System::Windows::Forms::Label^ label2; System::Windows::Forms::Label^ label3; System::Windows::Forms::Label^ label4; System::Windows::Forms::Label^ label6; System::Windows::Forms::Label^ label7; protected: /// Nettoyage des ressources utilisées. MainMenue::~MainMenue(); private: int numberToCompute; int highestPercentageReached; System::Windows::Forms::MenuStrip^ menuStrip1; System::Windows::Forms::ToolStripMenuItem^ filesToolStripMenuItem; System::Windows::Forms::ToolStripMenuItem^ openAFileToolStripMenuItem; System::Windows::Forms::ToolStripMenuItem^ exitToolStripMenuItem; System::Windows::Forms::ToolStripMenuItem^ helpToolStripMenuItem; System::Windows::Forms::Label^ ResultLabel; System::Windows::Forms::ProgressBar^ progressBar1; System::ComponentModel::Container ^components; void MainMenue::InitializeComponent(void); System::Void MainMenue::openAFileToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); System::Void MainMenue::exitToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); System::Void MainMenue::helpToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); void MainMenue::InitializeProgressBar(); void MainMenue::Form1_Shown( System::Object^ sender, System::EventArgs^ e); void MainMenue::backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e); System::Void MainMenue::backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e); void MainMenue::backgroundWorker2_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e); System::Void MainMenue::backgroundWorker2_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e); private: System::Void oadingSpecification(System::Object^ sender, System::EventArgs^ e) { } }; }
et le bloc de code avec les observatoires
#pragma managed #include "StdAfx.h" #include "Macro.h" #include "AlignStructure.h" #include "Enumerations.hpp" #include "Structure.h" #include "TypeDefs.hpp" #include "POS.h" #include "Layout.h" #include "ClassesAligner.hpp" #include "LinkDescription.h" #include "Manager.h" #include "Aligner.h" #include "WordManager.h" #include "OpenAFile.h" #include "MainMenue.h" extern std::wstring wsFileToOpen; extern std::wstring wsPathOfTheFile; extern std::wstring wsDiskOfTheFile; extern std::wstring wsLanguage; extern std::wstring wsTypeDocument; extern std::wstring wsDatabaseName; extern std::wstring wsDatabaseFileName; extern int nParagraph; extern int iSize; struct _CrtMemState Heap; unsigned long ulCounts; unsigned long ulSizes; unsigned long ulCount; unsigned long ulSize; unsigned long ulTotal; namespace SpecificationLoader { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Threading; using namespace System::DirectoryServices; namespace Word = Microsoft::Office::Interop::Word; bool bIsDbConnected; erc ulDocSize; bool bNewDoc = false; erc ulTotalNbWords; MainMenue::MainMenue(void) { int i; for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; Console::WriteLine("Constructeur MainMenue"); MainMenue::InitializeComponent(); // //TODO: ajoutez ici le code du constructeur // MainMenue::InitializeProgressBar(); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; progressBar1->Visible = false; bIsDbConnected = false; } MainMenue::~MainMenue() { if (components) { delete components; } } #pragma region Windows Form Designer generated code /// <summary> /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas /// le contenu de cette méthode avec l'éditeur de code. /// </summary> void MainMenue::InitializeComponent(void) { this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip()); this->filesToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->openAFileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->helpToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); this->progressBar1 = (gcnew System::Windows::Forms::ProgressBar()); this->backgroundWorker1 = (gcnew System::ComponentModel::BackgroundWorker()); this->ResultLabel = (gcnew System::Windows::Forms::Label()); this->label1 = (gcnew System::Windows::Forms::Label()); this->label2 = (gcnew System::Windows::Forms::Label()); this->label3 = (gcnew System::Windows::Forms::Label()); this->label4 = (gcnew System::Windows::Forms::Label()); this->label6 = (gcnew System::Windows::Forms::Label()); this->label7 = (gcnew System::Windows::Forms::Label()); this->menuStrip1->SuspendLayout(); this->SuspendLayout(); // // menuStrip1 // this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->filesToolStripMenuItem, this->helpToolStripMenuItem}); this->menuStrip1->Location = System::Drawing::Point(0, 0); this->menuStrip1->Name = L"menuStrip1"; this->menuStrip1->Size = System::Drawing::Size(1018, 24); this->menuStrip1->TabIndex = 0; this->menuStrip1->Text = L"menuStrip1"; // // filesToolStripMenuItem // this->filesToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->openAFileToolStripMenuItem, this->exitToolStripMenuItem}); this->filesToolStripMenuItem->Name = L"filesToolStripMenuItem"; this->filesToolStripMenuItem->Size = System::Drawing::Size(40, 20); this->filesToolStripMenuItem->Text = L"Files"; // // openAFileToolStripMenuItem // this->openAFileToolStripMenuItem->Name = L"openAFileToolStripMenuItem"; this->openAFileToolStripMenuItem->Size = System::Drawing::Size(137, 22); this->openAFileToolStripMenuItem->Text = L"Open a file"; this->openAFileToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::openAFileToolStripMenuItem_Click); // // exitToolStripMenuItem // this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem"; this->exitToolStripMenuItem->Size = System::Drawing::Size(137, 22); this->exitToolStripMenuItem->Text = L"Exit"; this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::exitToolStripMenuItem_Click); // // helpToolStripMenuItem // this->helpToolStripMenuItem->Name = L"helpToolStripMenuItem"; this->helpToolStripMenuItem->Size = System::Drawing::Size(40, 20); this->helpToolStripMenuItem->Text = L"Help"; this->helpToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::helpToolStripMenuItem_Click); // // progressBar1 // this->progressBar1->Location = System::Drawing::Point(36, 116); this->progressBar1->Name = L"progressBar1"; this->progressBar1->Size = System::Drawing::Size(927, 19); this->progressBar1->TabIndex = 1; // // ResultLabel // this->ResultLabel->AutoSize = true; this->ResultLabel->Location = System::Drawing::Point(66, 418); this->ResultLabel->Name = L"ResultLabel"; this->ResultLabel->Size = System::Drawing::Size(0, 13); this->ResultLabel->TabIndex = 2; // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(761, 418); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(0, 13); this->label1->TabIndex = 3; // // label2 // this->label2->AutoSize = true; this->label2->Location = System::Drawing::Point(509, 233); this->label2->Name = L"label2"; this->label2->Size = System::Drawing::Size(0, 13); this->label2->TabIndex = 4; // // label3 // this->label3->AutoSize = true; this->label3->Location = System::Drawing::Point(432, 418); this->label3->Name = L"label3"; this->label3->Size = System::Drawing::Size(0, 13); this->label3->TabIndex = 5; // // label4 // this->label4->AutoSize = true; this->label4->Location = System::Drawing::Point(41, 88); this->label4->Name = L"label4"; this->label4->Size = System::Drawing::Size(0, 13); this->label4->TabIndex = 6; // // label6 // this->label6->AutoSize = true; this->label6->Location = System::Drawing::Point(36, 154); this->label6->Name = L"label6"; this->label6->Size = System::Drawing::Size(0, 13); this->label6->TabIndex = 8; // // label7 // this->label7->AutoSize = true; this->label7->Location = System::Drawing::Point(216, 154); this->label7->Name = L"label7"; this->label7->Size = System::Drawing::Size(0, 13); this->label7->TabIndex = 9; // // MainMenue // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(1018, 479); this->Controls->Add(this->label7); this->Controls->Add(this->label6); this->Controls->Add(this->label4); this->Controls->Add(this->label3); this->Controls->Add(this->label2); this->Controls->Add(this->label1); this->Controls->Add(this->ResultLabel); this->Controls->Add(this->progressBar1); this->Controls->Add(this->menuStrip1); this->MainMenuStrip = this->menuStrip1; this->Name = L"MainMenue"; this->Text = L"MainMenue"; this->menuStrip1->ResumeLayout(false); this->menuStrip1->PerformLayout(); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion System::Void MainMenue::openAFileToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { int i; OpenAFile^ newWindow = gcnew OpenAFile( this); newWindow->ShowDialog(); progressBar1->Visible = true; // c'est ici qu'on démarre l'aligner. // erc CAligner::AlignDocumentsPairs(bool bMMIMode, std::wstring sSourceFileName, std::wstring sDocType, std::wstring *sDatabaseType, std::wstring *sDatabaseFileName); bIsDbConnected = SpecificationLoader::objAligner.InitiateDbTransaction( wsDiskOfTheFile + wsPathOfTheFile + wsFileToOpen, bIsDbConnected, bNewDoc, wsTypeDocument, &wsDatabaseName, &wsDatabaseFileName); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; objWordManager = gcnew SpecificationLoader::CWManager; objWordManager->StartWordApi(); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; ulDocSize = objWordManager->OpenWordDocument( wsDiskOfTheFile + wsPathOfTheFile + wsFileToOpen); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; backgroundWorker1->RunWorkerAsync(); } System::Void MainMenue::exitToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { objAligner.CloseDBTransaction(); this->Close(); } System::Void MainMenue::helpToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { } void MainMenue::InitializeProgressBar() { Shown += gcnew EventHandler( this, &MainMenue::Form1_Shown); // To report progress from the background worker we need to set this property backgroundWorker1->WorkerReportsProgress = true; // This event will be raised when we call ReportProgress backgroundWorker1->ProgressChanged += gcnew ProgressChangedEventHandler( this, &MainMenue::backgroundWorker1_ProgressChanged); backgroundWorker1->DoWork += gcnew DoWorkEventHandler( this, &MainMenue::backgroundWorker1_DoWork ); } void MainMenue::Form1_Shown( System::Object^ sender, System::EventArgs^ e) { // Start the background worker progressBar1->Visible = false; } // Back on the 'UI' thread so we can update the progress bar void MainMenue::backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e) { System::String^ msg; // The progress percentage is a property of e progressBar1->Value = e->ProgressPercentage; msg = L"Progress is " + e->ProgressPercentage + L"%"; ResultLabel->Text = msg; msg = L"Paragraph progress is: " + nParagraph; label1->Text = msg; msg = L"Number of Word processed is: " + ulTotalNbWords; label3->Text = msg; msg = L"Specification loading Process"; } // Back on the 'UI' thread so we can update the progress bar void MainMenue::backgroundWorker2_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e) { System::String^ msg; label4->Text = msg; if( e->ProgressPercentage == 100) label6->Text = L"Start of the Coherence assertion step"; if (iSize > 0) { msg = L"Number of Semantic Element Loaded: " + iSize + L" Elements"; label7->Text = msg; } } System::Void MainMenue::backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) { // The progress percentage is a property of e // This event handler is where the actual, // potentially time-consuming work is done. // Get the BackgroundWorker that raised this event. int i; for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender); // C'est ici qu'on démarre l'anlyse en tâche de fond. objWordManager->StartDocAnalysis( backgroundWorker1, ulDocSize, bNewDoc); for( i = 0; i < _MAX_BLOCKS; i++) { ulCounts += Heap.lCounts[i]; ulSizes += Heap.lSizes[i]; } ulTotal = ulCounts * ulSizes; objSoftwareManager.Termination(); objWordManager->StartCoherenceAssertion( backgroundWorker1, ulDocSize); } }
Jean Noël Martin
- Modifié JeanNoel53 jeudi 31 octobre 2013 09:58
- Marqué comme réponse JeanNoel53 jeudi 31 octobre 2013 09:58