Hello Arsalan,
I looked into my code again and confirmed that the CancellationPending
property
has already been implemented. Still no go. :(
Originally the call to CancellationPending is within a foreach loop
like this:
public bool parseEntries(ref BackgroundWorker worker,
ref List<StringHolder> ACVMEntries,
ref DoWorkEventArgs e)
{
...
if (ACVMEntries != null)
{
..
foreach (StringHolder shEntry in ACVMEntries)
{
...
if (worker.CancellationPending)
{
e.Cancel = true;
//return false;
break;
}
// long work starts here...
}
}
}
I changed it and tried calling the property *before* the loop like
this:
public bool parseEntries(ref BackgroundWorker worker,
ref List<StringHolder> ACVMEntries,
ref DoWorkEventArgs e)
{
...
if (worker.CancellationPending)
{
e.Cancel = true;
//return false;
break;
}
else
{
if (ACVMEntries != null)
{
..
foreach (StringHolder shEntry in ACVMEntries)
{
...
// long work starts here...
} // of foreach
} // of inner if
} // of outer if
}
Any help appreciated.
Benj
On Oct 14, 11:27 am, Benj Nunez <[email protected]> wrote:
> Hello Arsalan,
>
> I will re-write the code under my worker thread to see if
> CancellationPending will
> work. This I think, must be it.
>
> Thank you,
>
> Benj
>
> On Oct 13, 6:37 pm, Arsalan Tamiz <[email protected]> wrote:
>
> > Andrew is right that you haven't provided any details. But I would like to
> > put some points for you,
>
> > According to MSDN,
> > -----------------
>
> > CancelAsync submits a request to terminate the pending background operation
> > and
>
> > "sets the
> > CancellationPending<http://msdn.microsoft.com/en-us/library/system.componentmodel.backgro...>
> > property
> > to true."
>
> > When you call CancelAsync, your worker method has an opportunity to stop its
> > execution and exit.
>
> > "The worker code should periodically check the
> > CancellationPending<http://msdn.microsoft.com/en-us/library/system.componentmodel.backgro...>
> > property
> > to see if it has been set to true."
>
> > -----------------
> > So its your responsibility to check the "CancellationPending" property. Are
> > you checking it? If you are checking then see what statements are being
> > executed before this "checking". Are those statements being hanged
> > somewhere?
>
> > Regards,
> > Arsalan Tamiz
>
> > On Tue, Oct 13, 2009 at 12:20 PM, Benj Nunez <[email protected]> wrote:
>
> > > Hello everyone,
>
> > > I recently wrote a program that allows users to interrupt a process
> > > which runs within a thread.
> > > I have code that looks like this:
>
> > > private void btnStop_Click(object sender, EventArgs e)
> > > {
> > > bwOverAll.CancelAsync();
> > > btnStop.Enabled = false;
> > > }
>
> > > I'm not sure if threads rely somewhat on what CPU the PC has. I have
> > > tested my program to run
> > > on the following PCs and I can start/stop threads at will with no
> > > issues:
>
> > > PC#1) Windows XP Home with SP3. Intel Pentium D 2.80Ghz, 504mb ram,
> > > Hyperthreading enabled.
> > > PC#2) Windows XP Pro with SP3, Intel Pentium 4, 2GB ram,
> > > Hyperthreading enabled.
>
> > > On the production machine however, I checked its specifications to be
> > > like this:
>
> > > PC#3) Windows XP Home, Intel Celeron.
>
> > > All three PCs have .net framework 3.5 installed.
>
> > > That's all I can remember. But I can check again about its ram and
> > > clock speed.
> > > Could you tell me exactly where to first look for in cases like this?
> > > Normally I expect that
> > > when I click the button to stop an action (threaded), there's a brief
> > > delay then the thread eventually stops. But in my case it didn't.
>
> > > Any advice?
>
> > > Benj