|
The recommended way is to use some sort of a signaling mechanism and just return from the method.
Regards
Senthil
|
|
|
|
|
OH, and since the thread has nothing to do, it would just be collected by GC?
/\ |_ E X E GG
|
|
|
|
|
Sorry, It was ProcessThread. But Abort method is on Threading.Thread. I cannot have the collection of user-defined threads, or can I ?
Wizard_01
|
|
|
|
|
Why would an app run on the same exact dataset on a PC with 512MB of RAM eat up 300MB of memory but when run on a PC with 1024MB of Ram only use 44MB at peak?
|
|
|
|
|
If you're judging by the "Mem Usage" column in the task manager, you're looking in the wrong place for memory usage; that column takes into account Windows memory paging, which will vary depending on the amount of RAM in the system.
Tech, life, family, faith: Give me a visit.
Judah Himango
|
|
|
|
|
Hi you all
I am programming a little chat-program. In order to work with the source code of the chat-text I try to get into a string - the action causes my program to get very slow the mous comes over the webbrowser. Here's the code:
private void docucTimer_Tick(object sender, EventArgs e)
{
DocumentText = chatBox1.DocumentText;
if(curText.Length != DocumentText.Length)
{
docText = DocumentText;
try
{
docText = docText.Substring(curText.Length);
}
catch
{
}
curText = DocumentText;
chatBox1_OnDocumentTextChanged();
}
}
The first line, DocumentText = chatBox1.DocumentText;, is the problem.
If the mouse comes over the webbrowser in the program, my CPU-Usage goes up to a 100 %. This happens after at about 5 minutes of program-runtime.
If I disable the code shown upper from the beginning on, the problem does not appear, but - and thats really strange - if I disable the code after I first recognized the problem it will still exist and there's no way to get the old state excerpt of restarting the software...
Is there a way to solve the problem?
I am a noob, I am sorry for that - and also for my not-being-able to speak English :P
And thank you for your help!
|
|
|
|
|
One possible cause of the problem is that if you are constantly calling .Substring (which allocates a new string on the heap), the garbage collector will eventually kick in and have to clean up some unused memory, which might be what you're seeing.
How often does the docucTimer occur? If its less than every 1000 millisecods, you may be doing too many allocations via Substring.
Tech, life, family, faith: Give me a visit.
Judah Himango
|
|
|
|
|
The Interval of the docucTimer is set to 1000 milliseconds.
Well, I think in the beginning I did not even work with substring, I though this method would be more efficient and tried to solve the problem this way. You know it didn't work.
I've now tried to run the program only with the first line, and the problem still occured. I looked like that: (Of course it didn't work correctly anymore, but the problem was still there)
private void docucTimer_Tick(object sender, EventArgs e)
{
DocumentText = chatBox1.DocumentText;
// if(curText.Length != DocumentText.Length)
// {
// docText = DocumentText;
// try
// {
// docText = docText.Substring(curText.Length);
// }
// catch
// {
// }
// curText = DocumentText;
// chatBox1_OnDocumentTextChanged();
// }
}
hm...
/Edit: If I also comment out the first line the problem is gone, so it is because of some other part of the program...
|
|
|
|
|
Hello!
I want to get the volume names of the disks on my computer. I found a nice way that you are supposed to be able to get it and this is the way:
<br />
SelectQuery sqlLogicalDrives = new SelectQuery("SELECT * FROM Win32_LogicalDisk");<br />
ManagementObjectSearcher moSearcher = new ManagementObjectSearcher(sqlLogicalDrives);<br />
ManagementObjectCollection mocLogicalDrives = moSearcher.Get();<br />
<br />
foreach (ManagementObject moDrive in mocLogicalDrives)<br />
{<br />
cmbExplorerRootFolder.Items.Add(moDrive.Properties["VolumeName"].Value.ToString());<br />
}<br />
but for some reaseon I get the error message: An unhandled exception of type 'System.NullReferenceException' occurred in MyProject.exe
Anyone who can tell me what I'm doing wrong?
Thanks in advance!
~~~~~~~~~~~~~~
Martin Lundberg
Student, Sweden
I have to thank every member of the Code Project for making it such a great place for a beginner to learn!
|
|
|
|
|
Either the value returned by Properties["VolumeName"] or .Value is null. You need to do some simple checks from unknown sources beforing calling methods or accessing properties on an instance:
foreach (...)
{
PropertyData data = moDrive.Properties["VolumeName"];
if (data != null)
{
object value = data.Value;
if (value != null)
cmbExplorerRootFolder.Items.Add(value.ToString());
}
} You can actually simplify this code, however, using the indexer for the ManagementObject class that gets the value or a property as its proper type:
foreach (...)
{
string value = moDrive["VolumeName"] as string;
if (value != null)
cmbExplorerRootFolder.Items.Add(value);
}
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Hello again!
Now the error is not showed (thanks! =)) but, nothing is added to the combobox =/. When the application starts I can hear a: (the floppy drive) but it is not added to the combobox and neither is anything else =/
~~~~~~~~~~~~~~
Martin Lundberg
Student, Sweden
I have to thank every member of the Code Project for making it such a great place for a beginner to learn!
|
|
|
|
|
Found out why, I had not named my disks, but still in Explorer they look like: Local Disk (C , Local Disk (D , etc.
Should I get what kind of disk it is, and then if volume is empty add like Local disk, myself or is local disk something else then "VolumeName"? =)
Thanks in advance!
~~~~~~~~~~~~~~
Martin Lundberg
Student, Sweden
I have to thank every member of the Code Project for making it such a great place for a beginner to learn!
|
|
|
|
|
You'd best get the drive letter and optionally get the name. What you see by default in Explorer is the drive type.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Hello!
But the DriveType I get by using ["DriveType"] is an int meaning different stuff like: 2 = Removable disk, 3 = local disk, 5 = compact disk. In Explorer it diferences from CD and DVD. I've got a swedish version of winXP so I'm not really sure what it says in the english ones.
~~~~~~~~~~~~~~
Martin Lundberg
Student, Sweden
I have to thank every member of the Code Project for making it such a great place for a beginner to learn!
|
|
|
|
|
Your subject reads "Getting the volume names of disks", so why do you care about the drive types? To accurately get the drive types you should be using a different set of APIs that encapsulate getting the drive type based on what media is in there. These require P/Invoke and can be found in the "Windows Management" section of the Platform SDK, available for download or you can find the documentation online at http://msdn.microsoft.com/library[^].
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Sorry that I was confused from start (and still am). I thought that what I saw was the Volume names. I've been trying to find the Windows Management and P/Invoke section. I've found the Windows Management Instrumentation (WMI) but still not P/Invoke or how to get the srive types. I'll search some more, thanks once again for the help! =)
Edit: I found something here: http://www.dotnet247.com/247reference/msgs/19/99154.aspx I have not tested it yet but it uses P/Invoke so it may be what your talking about.
~~~~~~~~~~~~~~
Martin Lundberg
Student, Sweden
I have to thank every member of the Code Project for making it such a great place for a beginner to learn!
|
|
|
|
|
The volume names are what you use to read/write from/to the volume, like C: or A:, or - if it has specified an actual volume name (like I name my root drive with Windows installed on it "System") - it is the name given to the volume. The API you found in that post - GetVolumeInformation - explains it quite well.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Can someone show me C# code to save and get an image data from/in a mdb database.
Please i can't use SQL SERVER code or VB.NET code, thanks.
|
|
|
|
|
|
|
How can I have codebehind file for global.asax file and how to reference it in global.asax as I want to execute some application start up code in Application_Start so I can access global variables like Global.HostName, Global.portalName and so on.
I am using VS005 beta1 - TecheEd 2004
REgards.
MaulikCE.
|
|
|
|
|
Whidbey (.NET 2.0) introduced partial classes, which allow a class to be defined by two different source files. VS Whidbey (VS 2005) uses this to replace code-behind files.
To see hidden files like the partial classes (also used by forms designers to separate user code from designer code), click the Project -> Show Hidden Items (or something similar - I don't remember the exact text off-hand) menu items while a file in your project is selected.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
I have tried with "Show all files" and "Refresh" button in the solution explorer but couldn't see the form designers' codebehind and global.asax.cs...
Here's my story:
VS 2005 doesn't offer global.asax file, when I create File>New>Website...So, I have tried adding it mannually..So, I went to Add new item...so, it shows visual studio installed templates...I selected "Global Application Class"...but what's this!!!! ( Place code in seperate file checkbox is already disabled ) So, I have to have acccept inline coding ( it gives Application_start, Session_start in global.asax file itself) but I want sepearate class i.e. codebehind file..
Any help regarding this would greatly be appreciated!!!
REgards
MaulikCE.
|
|
|
|
|
You'll need to define a class that extends HttpApplication in your project and set the Inherts attribute to that fully-qualified class name:
<%@ Application Language="C#" Inherits="MySite.Application" %> You can then code in a separate file, although I wonder why. Whidbey extends IntelliSense to server-side script and the class is still compiled when parsed. You can even pre-compile an entire site, now. See ASP.NET 2.0 Internals[^] for this and more information.
For a look at the differences between tradition "code-behind" and how it will work in Whidbey, see ASP.NET 2.0 Compilation Model Changes[^].
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Thanks Heath, I have tried to apply what I can perceieve from your comment but It constantly gives build error - "Could not load type 'MySite.Application'."...Its tiresome!!!
So, At last I have decided to put all code here rightaway(though I feel its bad), so you can throw some light where I am making mistakes in adapting Whidbey...
//Applicaiton class
<br />
using System;<br />
using System.Web;<br />
<br />
public class Application: HttpApplication<br />
{<br />
public Application()<br />
{<br />
}<br />
<br />
public void Application_Start(Object sender, EventArgs e)<br />
{<br />
<br />
}<br />
...<br />
}
Here's the only line I have in global.asax
<%@ Application Language="C#" Inherits="MySite.Application" %>
I have even tried, <%@ Application Language="C#" Inherits="Application" %> but same error!!!
REgards.
MaulikCE..
|
|
|
|