im coding an mp3 database which will read the URL of an MP3 given by the user and will tell the file size and the length of the mp3. i was trying with FilInfo but it doesnt support URIs.. so i tried System.Net.Webrequest and i couldnt achive what i wanted..please give me a hint how to do it..a little code sample or just the idea would be a great help for me..
P.S: by the way is it possible to get all file details within a remote folder
it seems web request has methods to download the file..bt isnt there anyway to get the file details without downloading..something like this download accelerators does..they show the file size n details before they download a perticular file.
I'm not sure...have you looked at the header or any of the other data exposed through WebRequest or WebResponse? I see ContentLength in WebResponse, that may give you the file size. File details are probably contained within the first few bytes of the WebResponse stream.
I think you are not getting the point.
I want to eliminate hard coded strings hence I have stored all the hard coded strings like "foo" in Application Resources. Now I want to use these resource strings in my application. I have no problem using the resource string except in switch statements. where the case requires a constant value. This is the place where I am finding hard to replace
string s = "foo";
case"foo": // want to replace this hard coded string !!!
MessageBox.Show("it was foo");
Ah, gotcha. I don't think that will work, because the string in the resources isn't constant. Instead of doing a switch, you should just use if/else, using string.Equals(first, second, comparisonOptionsAndCulture)
Can anyone tell me how to retrieve the data from my table and display it all in one continoues form like that form of MS Access where I create just one control bound to each field, and this list of contrls repeates itself continouesly till all the records are displayed.
I can do the same task by either DataGrid control or even ListBox
But I am familier with the method of MS Access Forms and I think C# will provide similar forms since both Access and C# are of Microsoft
I'm trying to make a directory watcher application that uses the FileSystemWatcher.
The basic program requirements are:
* The program should watch a directory for list of files given by user (setup values)
* The file may be new or old and may exist in the directory (when application not active)or be created when the application is active.
* When the program begins it should move the existing files.
* If say ten zip files and ten doc files are copied to the directory then it should move the zip files to the directory the user specified for zip files (setup value for particular) file extension and the doc files to the directory the user specified for doc files.
* The program should have a UI that has a listview that shows the activities done.
I'm using the FileSystemWatcher and a main worker function that does all the finding and moving.I need to tell the list box the events.
Any suggestion on how this should be done in the threading way (best practice)
Some input to go about it based on the above ideas appreciated
Look up the BackgroundWorker class: it has a DoWork event that fires on a background thread. Do your work there. It has a ProgressChanged (or something) event that fires on the UI thread. You can cause the ProgressChanged event to fire from the background thread by calling worker.ReportProgress(state, percentComplete).
Another option is to get the SynchronizationContext of the UI (using the static System.Windows.Forms.WindowsFormsSynchronizationContext.Current property), then on the background thread, call syncContext.Post(someDelegateToExecute). The someDelegateToExecute method will execute on the UI thread.
If you are familiar with delegates and the BeginInvoke stuff for UI threads, please use that to update your list box. If your not familiar with it, you should read up on it. There are some good articles on this web site and the help documentation is good on this subject (it comes with examples).
In my class I have to update a property every second until the user stops this task.
I choose a System.Threading.Timer to do the job but the timer runs on its own thread so it cannot update the class property.
Is it possible to implement something like Control class's Invoke method or do I have to choose another approach?
Thanks Luc for your quick response!
I think I have to go in more detail:
I developed a class which accesses my tv card only for radio stations so I do not have a gui thread.
But I would like to send the signal level of the station by calling a method of a com interface every second within the radio class..
Now using a timer who makes the call to the interface, I get an error, this is because the timers thread is not the thread which created the radio class
As far as all com objects and interfaces are part of a windows forms application I was able to use this.Invoke((MethodInvoker)delegate()... to make a call to the com interface method in the timers TimerCallback.
Of course I can solve my problem using a timer in the windows forms application, but I would like to use the timer in my radio class.
if you have a "TVCard" class in C#, it should probably not be concerned by GUI stuff at all;
but it might offer a "Station" property getting/setting the current station selected.
Then an app using the TVCard class could periodically read and display the Station property
using the right thread, and based on its own requirements.
Alternatively, but I dont like this as much, the TVCard class could offer an event that
periodically reports the Station setting; then the app can subscribe to that event,
and must itself take care of the threading issues. The reason I dont like this that much
is that now the TVCard is deciding on how often something happens in the app, normally
the app is in charge !
Of course you could give the TVCard an Interval property as well,
so it really starts to look like a timer.
And yes, you could teach your TVCard to always raise the event on the GUI thread too,
but that would not be needed when an app wants to know but not display the Station setting,
therefore it should not be included in the TVCard ("separation of concerns").
So I would stick with the simple Station propery and let the app do timing and GUI stuff.