Multi-tasking using forms

Posted on 2000-04-28
Last Modified: 2012-05-04
Ok, my problem is that my application has a function key which (should) go off to produce a report in the background.  This report isn't to be printed but,when ready, is displayed on a spreadsheet control.  In the meantime I would like the user to be able to carry on doing data-entry.

I've followed the coffee example in the VB documentation and also a couple of examples on this excellant website.  However they all seem to depend on use of the timer control.  When I ignore this and play around with the code to produce the report in the Active X exe my calling application still hangs whilst waiting for the exe to finish processing.

I can't set the ActiveX exe to run as unattended execution because it displays a form on completion of processing.  

What I would like is the processing to carry on in the background and an event raised to signal that the report is ready to be displayed.  How can I get this to happen?  

My ActiveX exe is set up as Multiuse and the projecties are set to 'thread per object'.  

Can anybody help?
Question by:saffron
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
LVL 18

Accepted Solution

mdougan earned 500 total points
ID: 2759075
A simple answer would be for your Active-X exe to set a Public member variable to a specific value when complete.  

Your client application will call a public Sub in the Active-X exe.  All this sub will do is enable a timer in the Active-X exe, then the sub finishes and control is returned to your client app.  When the timer fires a second or so later in the Active-X exe it sets it's own enabled property to false and  starts to process your report, when finished it sets some global flag to True.

The client, meanwhile, after calling the public Sub in the Active-X exe to start the report, then it enables it's own timer.  This timer goes off every few seconds and checks the global flag in the Active-X EXE.  When it sees the value is True, it then calls the method in the Active-X EXE to display the report.

A more complicated answer is that you can use Multi-threading in your client application (no need for an active-x).  However, there are a lot of restrictions to using the CreateThread API under VB6 (VB5 has a little better support for multi-threading.  In Multi-threading, you can specify a Call-Back routine, so that when the processing is complete, it will call the function you specify.

Expert Comment

ID: 2759450
The timer control is your answer. You must set up the timer control on the form of your background report. On form load, start the timer.

As an active X exe, the spawned program will kick off the timer and release control to your calling program immediately. When the timer event fires, it will execute the code you have placed in <object>_timer. This is where you put your report creation code. Your report production code should also have an event "Report Done" that is raised when the task is complete.

We have a process that uses this methodology to control numerous processes running at the same time.

Author Comment

ID: 2776719

Thanks I'm going to accept your comment as the answer.  Unfortunately I inadvertently posted this question twice and a suggestion similar to yours was given by 4P so I'm going to have to split the points 2-ways.  Hope this doesn't seem unfair.

Basically you were right and the key to the problem was manipulating the enabled property of the timer in order to release control back to the client.

Thanks for your help.


Expert Comment

ID: 2779175
Reviewing question.

Customer Service
LVL 18

Expert Comment

ID: 2779409
No problem, in the future, don't be shy about asking customer service to delete the duplicate question.  Just post a comment explaining what you'd done and invite the people who'd commented to post in the other question instead.


Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to Add / Edit Windows Menu 4 80
how to Classify of email (pdf attachments) 7 56
Sub or Function is not defined 6 59
adding "ungroup sheets" to existing vbs code 5 75
I’ve seen a number of people looking for examples of how to access web services from VB6.  I’ve been using a test harness I built in VB6 (using many resources I found online) that I use for small projects to work out how to communicate with web serv…
If you have ever used Microsoft Word then you know that it has a good spell checker and it may have occurred to you that the ability to check spelling might be a nice piece of functionality to add to certain applications of yours. Well the code that…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

732 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question