I have used the following method to set the running priority for a
process and its affiliated threads. It is noticable at statement (*)
that if the process has already exited, the method will return
immediately without further operations. However, sometimes the method
may generate the following exception:
================================================== =========
03/07/04 3:48:06 AM auto_rep.Run() error:
System.InvalidOperationException: The request can not be processed
because the thread (2428) has exited.
at System.Diagnostics.ProcessManager.OpenThread(Int32 threadId, Int32
access)
at System.Diagnostics.ProcessThread.OpenThreadHandle( Int32 access)
at System.Diagnostics.ProcessThread.set_PriorityBoost Enabled(Boolean
value)
at lib.libs.set_proc_priority(Process proc, Int32 level)
at DBSample.auto_rep.Run()
================================================== =========
The contextual codes calling the method are:
================================================== =========
if( libs.work_hour() )
libs.set_proc_priority( Process.GetCurrentProcess(), 1 );
else
libs.set_proc_priority( Process.GetCurrentProcess(), 2 );
================================================== =========
The full codes of the method are listed as below:
================================================== ========
public static void set_proc_priority( Process proc, int level )
{
int k;
if( proc.HasExited ) (*)
return;
proc.PriorityBoostEnabled = true;
switch( level )
{
case( -2 ):
proc.PriorityClass = ProcessPriorityClass.Idle;
for( k = 0; k < proc.Threads.Count; k++ )
{
proc.Threads[k].PriorityBoostEnabled = true;
proc.Threads[k].PriorityLevel = ThreadPriorityLevel.Idle;
}
break;
case( -1 ):
proc.PriorityClass = ProcessPriorityClass.BelowNormal;
for( k = 0; k < proc.Threads.Count; k++ )
{
proc.Threads[k].PriorityBoostEnabled = true;
proc.Threads[k].PriorityLevel = ThreadPriorityLevel.BelowNormal;
}
break;
case( 0 ):
proc.PriorityClass = ProcessPriorityClass.Normal;
for( k = 0; k < proc.Threads.Count; k++ )
{
proc.Threads[k].PriorityBoostEnabled = true;
proc.Threads[k].PriorityLevel = ThreadPriorityLevel.Normal;
}
break;
case( 1 ):
proc.PriorityClass = ProcessPriorityClass.AboveNormal;
for( k = 0; k < proc.Threads.Count; k++ )
{
proc.Threads[k].PriorityBoostEnabled = true;
proc.Threads[k].PriorityLevel = ThreadPriorityLevel.AboveNormal;
}
break;
case( 2 ):
proc.PriorityClass = ProcessPriorityClass.High;
for( k = 0; k < proc.Threads.Count; k++ )
{
proc.Threads[k].PriorityBoostEnabled = true;
proc.Threads[k].PriorityLevel = ThreadPriorityLevel.Highest;
}
break;
case( 3 ):
proc.PriorityClass = ProcessPriorityClass.RealTime;
for( k = 0; k < proc.Threads.Count; k++ )
{
proc.Threads[k].PriorityBoostEnabled = true;
proc.Threads[k].PriorityLevel = ThreadPriorityLevel.TimeCritical;
}
break;
}
return;
}
================================================== ========
Any solution to the problem?
*** Sent via Devdex http://www.devdex.com ***
Don't just participate in USENET...get rewarded for it!