|
All this does is return a custom IEnumerator that doesn't keep track of the serial number (version of the enumerator). This is a very bad idea for reasons I mentioned earlier. If the collection over which you're enumerating changes, you should not continue enumerating because the underlying data has changed.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Interesting. Yeah like I said I hadn't actually looked at their code, thought I'd throw it out on the table anyway.
---------------------------
He who knows that enough is enough will always have enough.
-Lao Tsu
|
|
|
|
|
One way to do it is to have ArrayList that holds keys to be deleted.
ArrayList delteList = ...
foreach element in hashtable
if want to delete key
add key to deleteList
foreach key in deleteList
hashtable.delete(key)
|
|
|
|
|
Does anybody know how I could print a .Net Bitmap with Win32 Api calls? Thanks alot
|
|
|
|
|
Why would you want to? GDI+ (encapsulated in the System.Drawing classes) gives you all the functionality as GDI (though some things are still easier in GDI at times) and all the printing facilities in .NET allow you to manipulate the image that is printed (including text) however you want. It's a heck of a lot easier, especially since coordinate transformations are a little easier since the printer-specific coordinate mapping is abstracted away.
If you want to use Win32 printing APIs (which is really just GDI using the HDC of a printer), then find an example in C/C++ and go to all the work of P/Invoking what you need to do it in C#.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
The reason that I want to use API is because I am working on a project to print invoices. The .Net printing framework is to slow to keep up with the volume of invoices printed every night. So, my only other alternative is to print using the API. Thanks for your help.
|
|
|
|
|
By the time the performance hit for marshaling parameters for P/Invoked method invocation, you probably won't notice a huge difference anyway.
Perhaps a better solution is an N-tier design, one in which reports are generated and placed in a directory where another app (or even if the printer "driver" supports such a thing) is responsible only for printing the queued reports and removing them or backing them up. This would be truly faster so that your reporting app can just worry about generating these reports from the onslaught of all this data without having to wait for the printer queue to free-up after a few pages go in. A good multi-threaded design would help, but eventually you'd have to start blocking for sake of memory and performance.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
That wouldn't work because I only have a certain block of time that the reports can print because the printer is used for other purposes and with the .Net printing framework, it is constantly going behond that block. It is not the report generation that is slowing down the process, it is the actual printing of the reports. And actually, I am almost done with the Win32 Api printing functions and it seems to be considerably faster.
|
|
|
|
|
Yeah why don't you start getting undress and start f***ing the printer....
|
|
|
|
|
Why are you posting as Anonymous, you don't want anybody to know who you are?
|
|
|
|
|
I'm trying to code something that would act like Google's Deskbar.
Basically, I want an editbox in the Windows Taskbar, where I would type a work, and it would execute Encarta's Dictionary accordingly:
msdict -danythingtyped
What should I read about?!
Thanks.
Sammy
"A good friend, is like a good book: the inside is better than the cover..."
|
|
|
|
|
You would have to create a shell extension called a "Desk Band". See this MSDN article[^] for Microsoft's introduction to Explorer Bars, Tool Bands, and Desk Bands. There is also an article here[^] on CodeProject.
RageInTheMachine9532
|
|
|
|
|
I hope I can articulate this so that you can understand the problem. I built to classes: Encrypt and Decrypt according to MSDN article. When I run the program to encrypt and decrypt strings with the test program, everything works fine. The process is:
plaintext = "this is to be encrypted"
ciphertext = encrypt(plaintext)
returntext = decrypt(ciphertext)
in this example plaintext and returntext are identical.
I am trying to store the results of the encrypt to a registry string. ciphertext is a byte[] on the return so I am converting it to string for storage in the registry by using:
mystring = Convert.ToBase64String(cipherText)
in this example, ciphertext has a length of 48. I store mystring to the registry and retrieve it. This works fine. When I convert the plaintext from the registry back into a byte[] using:
cipherText = Encoding.ASCII.GetBytes(mystring);
the length is now 64 for ciphertext and the decrypt function fails returning an error message about PCKS7 padding is invalid.
How can I store the ciphertext to the registry and reconvert it back to byte[] without physically changing the data? Hope this makes sense. Thanks.
|
|
|
|
|
A good look at the documentation for the Convert and Encoding classes would be a good idea. You are mixing two incompatible methods, which just won't work. Convert.ToBase64String teams up with Convert.FromBase64String, and Encoding.GetBytes() teams up with Encoding.GetString(). Choose either pair and you should reach your goal.
John
"You said a whole sentence with no words in it, and I understood you!" -- my wife as she cries about slowly becoming a geek.
|
|
|
|
|
Thank you for responding, but I figured out exactly what you said after a few hours of pounding my head against the wall. Unfortunately, being new to c# is a head-ache and a half. It takes me 4 hours to do what I could do in 5 minutes with VFP. Thanks for the response.
|
|
|
|
|
I've got a webbrowser on my form i'm using for showing my current RSS feeds, problem is one of the sites i visit has javascript errors when it loads forcing the IE "do you want to run scripts..." error message to popup.
What do i need to set/override/do to stop these errors showing and destroying the flow of my tool?
Any ideas?
Thanks
|
|
|
|
|
Go into IE's Tools menu, Internet Options, click on Advanced tab, then uncheck 'Display a notification about every script error'.
RageInTheMachine9532
|
|
|
|
|
Thanks - i was trying to have this still turned on for users who like error messages to appear and do it in my program.
I think i have sussed it now by setting the "Silent" proeprty
on the browser object.
Thanks for your answer
|
|
|
|
|
I completely forgot about Silent! Thanks!
RageInTheMachine9532
|
|
|
|
|
Changing a user's preference is BAD idea without their acknowledgement or approval. You should make this an option in your software, or just rely upon their options already configured for IE (recommended). This is an ill practice and will be received as such.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I agree, really i just want javascript errors to not show on the one and only web browser in my application and leave the user settings alone. I can do this with popup windows by handling an event.
Is there an event i can handle that basically says "come here when a javascript error occurs" so i can then kill it off?
Setting the browser property "Silent" seems to work but i don't want to use this if it set globally all IE's to use this.
Thanks
|
|
|
|
|
Silent will tell the browser to show or not show dialog boxes. Critical errors and security alerts will still get shown, according to the docs on MSDN. Silent should NOT change the settings for all browser instances, just the one the Silent property was set to True on.
There is also no event fired when a script error occurs, at least on from the browser object. NavigateError will be fired if there is a server error returned, like 404 - Page not found, but it won't catch scripting errors.
RageInTheMachine9532
|
|
|
|
|
Off the top of my head, I'm not sure. If possible, this will definitely get into the advanced hosting interfaces, which you can read more about in the Advanced Hosting Reference[^] on MSDN. This uses a lot of COM interfaces to override and provide user interfaces for the WebBrowser control (or the MSHTML control, but that's too low-level and you have to implement much more that the WebBrowser provides for you).
To get these interfaces defined in a .NET assembly, there is a good trick that you can read about in the CodeProject article, Using MSHTML Advanced Hosting Interfaces[^], which also discusses how to use these to override behavior.
The MSDN link (and other articles in that parent section) cover a lot of functionality that may allow you to capture errors, but from what I've read and remember (since I've done a lot with hosting interfaces both in COM and .NET) I don't think you can. Good luck, though. It's at the very least a good learning experience to read through all that. Might even give you some ideas about additional functionality you may wish to provide to the WebBrowser control in your application.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
How can I get an image of a window or an application that I got its handle...
I did it by activating this window then capturing the screen and saving this image , but I'm asking about a way to get that image without activating the window .
|
|
|
|
|
You actually don't need to capture the screen to get the window, which would require the window to be active so you see it all. Instead of getting the desktop window (a la GetDesktopWindow or something), get the window handle and basically do the same thing. In C#, you can do this easily by enumerating the processes from Process.GetProcesses , find the right process, and then get the main window handle using Process.MainWindowHandle .
This still doesn't change the fact that the window needs to be active (i.e., in the foreground) to get the entire image. Windows (a window manager) draws a 2D surface and nothing more. While a window appears to be "behind" another, it's actually just that the foreground window is being painted in place of the "hidden" regions. In order to accomplish what you want, you'd have to create a virtual frame buffer of sorts in which the window would be paintined in its entirety instead of to the screen buffer, which is all but trivial and would still pose problems (believe me, it's not an easy thing - especially in higher-level languages like C3 and others that target the CLR).
Microsoft MVP, Visual C#
My Articles
|
|
|
|