|
You best shot for support like that, is the company that developed the library. Considering there are thousands of libraries, controls, and whatnot out there, it's very unlikely anyone has used the product.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
In the code below I load an image into a PictureBox using the Image.FromFile method. When I am done with that image I would like to release it so that I can delete it from the hard drive. However, even after I set the PictureBox's Image property to another image I still can not delete it. Obviously my process still has a handle to the file but I can't find a way to release that handle. I tried looking through the methods and properties of pictureBox1.Image but I did not see anything that looked useful. Any ideas?
------------------
pictureBox1.Image= Image.FromFile(MyFile);
pictureBox1.Image = Image.FromFile(AnotherFile);
System.IO.File.Delete(MyFile); //This fails becuase MyFile is "in use by another process"
|
|
|
|
|
Got it. Thanks.
------------------
pictureBox1.Image= Image.FromFile(MyFile);
pictureBox1.Image.Dispose();
pictureBox1.Image = Image.FromFile(AnotherFile);
System.IO.File.Delete(MyFile);
|
|
|
|
|
i was just about to say, Dispose the Image. When you Dispose an object, it releases any unmanaged resources it has open, including file handles.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Hi
I would like to catch an exception and then exit the method. There is a lot of code after the catch test and I was wanting to exit at that point rather without running through the rest of the code. Is there an 'exit' for a method? I have looked but cannot find anything.
Thanks in advance.
Stephen
|
|
|
|
|
|
I'm currently monitoring an service I wrote and notice in Task Manager the thread counts and handles are growing slowly and not releasing. I do the normal closing of connections and call the "dispose" method and set my objects = null. Am I missing something?
The application does the following.
1. Sink a rename file event using the "FileMonitor.EnableRaisingEvents".
2. Connect to a db using the ADODB.DLL and run SP and walk thru a recordset.
3. Walking thru a directory to see if certain files are present.
4. Create up to 17 processes objects and execute .cmd files (asynchronously) that runs ISQ and DTS packages.
5. Enumerate thru the process and check if the processes have exited.
These are the things I do to cleanup:
1. Close the recordset object and connect and call the “dispose” method. Also call the dispose on the db wrapper object.
2. Close all the processes and dispose them.
3. Set each class object equal to null.
When the service starts it only uses 8 threads and 148 handles, since it has ran twice the thread count is 12 and handles equal 307. Again any help is appreciated.
M.E. Guzman
|
|
|
|
|
|
I have an application for PocketPC devices running .net cf in which I need to trap the disposed event of a form. What should occur is this:
1. user click on the add button
2. they get a new form allowing them to add new information.
3. They click the add button and the add form disposes of itself after updating the data base.
4. the original form now needs to refresh the data on screen to reflect changes.
Being new to dot net I realize that I can do this easily by capturing the disposed action of the add form, but I can't quite figure out how to make it happen.
Any help is greatly appreciated.
-Andy Nortrup
|
|
|
|
|
Handling the Component.Disposed event would be pointless: the object is disposed - i.e., cleaned-up - before the event is fired.
Instead, call Form.ShowDialog on your add form. When the method returns, see if DialogResult.OK (or whatever is appropriate) was returned. At this point, the Form is still valid, so you can grab values like so:
using (AddForm form = new AddForm())
{
if (form.ShowDialog() == DialogResult.OK)
{
someTextBox.Text = form.SelectedItem;
}
} Using the using block like this makes sure that the modal form is disposed even if an exception is thrown. This is necessary for modal forms or you'll notice a decrease in performance and available memory over time.
This is the best way of creating a prompt box. If your form that needs to reflect the changes instantiates and shows the prompt form, then this is the most simple an extensible way of doing it (you can easily reuse your form).
Also, the Form.Closing and Form.Closed events - which are the proper events to use in order to refresh data - are not available in the .NET CF.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Many thanks, got it to do exactly what I needed.
-Andy
|
|
|
|
|
Is this possible? I don't want to merge Microsoft's .NET assemblies into the final build, but I don't want to have the distribution package to have all the little DLL files that the EXE depends on that I've written. In C++ you could do this--it was a linker option, I think.
Yeah, yeah, the idea is NOT to do this--I know. But what if I want to?
Marc
Microsoft MVP, Visual C#
MyXaml
MyXaml Blog
|
|
|
|
|
Marc Clifton wrote:
Yeah, yeah, the idea is NOT to do this--I know. But what if I want to?
There is program called assembly linker that can do that for you. Alternatively, just decompile all the files (i hope you know perl) and remove the interacting references from the source as well as duplicate entrypoints, then just recompile and you set
top secret xacc-ide 0.0.1
|
|
|
|
|
leppie wrote:
There is program called assembly linker that can do that for you.
Thanks!
leppie wrote:
Alternatively...
That sounded like a big "alternatively" task.
Marc
Microsoft MVP, Visual C#
MyXaml
MyXaml Blog
|
|
|
|
|
|
Nick Parker wrote:
Have you read about this: Assembly Linker (Al.exe)[^]
Thanks! Leppie got to it first. Never heard of it before.
Marc
Microsoft MVP, Visual C#
MyXaml
MyXaml Blog
|
|
|
|
|
Is it possible to play an AVI-file (Xvid) from within my C# application? I word prefer to have a panel where the video i played, but mayby it is only possible to start an extern player like Zoom Player. Is so, how do you start an extern player from a C# program? - and yes I am a newbee
|
|
|
|
|
You can try the Windws Media Player ActiveX Control:
1. Right-Click the toolbox, choose "Customize Toolbox..."
2. On the COM tab select "Windows Media Player".
3. Drag a Media Player onto the form.
4. Set the file name in the properties box.
5. Run the application - you see your video running in the Media Player control.
If you want to dive deeper into AVI handling, you can try playing the video yourself with managed DirectX or the
|
|
|
|
|
If you use the ActiveX Control like Corinna suggested maybe a look at the Media Player SDK on MSDN will be useful.
Another player can be started by calling Process.Start method. See the documentation for the Process class for more information.
If you want to control the started application you have to P/Invoke SendMessage to send message towards it. It think there was an article how to this with Media Player here on CodeProject.
www.troschuetz.de
|
|
|
|
|
An alternative method is to use the DirectShow runtime DLL: Quartz.dll. It's been a long time since I used it, but basically you add a reference to it in your project (it's in the System32 directory) and .NET will create the neccessary interop assemblies (I believe the reference will display as QuartzTypeLib in the Project Explorer). Following that you will have access to the necessary methods of DirectShow to playback audio and video files.
Note that this method is a lot more complex than just using the Media Player control, but it will also be a lot more configurable for you. There is too much code to post as an example to make this work for you, but I'm sure there are a lot of samples online that you can use.
HTH
-Sheppe Pharis, MCSD
|
|
|
|
|
Anyone know how to get the RootFolder to be "My Network Places" ?
|
|
|
|
|
You can't using the FolderBrowserDialog , unfortunately, because it requires a valid Environment.SpecialFolder enum.
You can, however, interop shell32.dll and use the Shell.BrowseForFolder method, passing a value of 0x13 (ssfNETHOOD ). It pretty much works the same, but you have to use the shell objects, such as Folder and FolderItem :
public string PickFolder()
{
ShellClass shell = new ShellClass();
Folder folder = shell.BrowseForFolder(form.Handle.ToInt32(),
"Browse for Folder", 0, 0x13);
if (folder != null)
{
Folder2 folder2 = (Folder2)folder;
return folder2.Self.Path;
}
return null;
}
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I guess I'm a bit confused as to how I would go about access the Folder object
I imported the shell32.dll as followes but I get an error when I try and call it.
[DllImport("shell32.dll")]
private static extern object BrowseForFolder(int Zero, string sTitle, int iOptions, int RootFolder );
BrowseForFolder(0,"Browse for Folder", 0, 0x13);
|
|
|
|
|
No, you don't P/Invoke the function (which that function doesn't exist anyway - it's a method of class) - you create an interop assembly. In VS.NET, right-click on your project, select Add Reference. Click the COM tab and find "Microsoft Shell Objects" or something like that, or just click the brose button and browse to %WINDIR%\system32\shell32.dll. This create an interop assembly. Follow the instructions I gave earlier to use the code.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have an application written in C# that has some icons as resouces (icons for the taskbar, toolbar, etc...). This application has been distributed to 30+ people already but I've noticed that not everyone has the icons installed. Some people have all the icons while some people have none of them. Every user installed from the same source (an MSI file created with a VS installer project). I don't understand why this is happening. Can anyone shed some light on this for me ? Thanks in advance...
-Pete
|
|
|
|