|
Hi
I am working in ASP.net and C#. I have a result.aspx page. I have to delete a file if the result.aspx page is closed or even if the user just moves from result.aspx page and goes to another page in the application. Could somebody please suggest some solution to this problem.
Any help would be appreciated.
Thanks
Chinky
|
|
|
|
|
Hi there,
In the Page_Unload event....
<< >>
|
|
|
|
|
Hi
Page_UnLoad event is not called when I close the browser. I am not able to delete file in the Page_UnLoad event.
|
|
|
|
|
You can detect when the session ends in Global.asax
But it depends on how you work with the file, is it per session or per page?
WM.
What about weapons of mass-construction?
|
|
|
|
|
In this case, you have to implement some js code in the onUnload event at client-side...
This link OnUnload event might help u...
<< >>
|
|
|
|
|
I have never worked with javascript. Is their a way to delete a file in javascript.
I have tried the following in javascript:
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.DeleteFile(filepath + filename, true);
But this didnt delete a file.
|
|
|
|
|
is their anyway to call an aspx page from javascript.
|
|
|
|
|
Hi
I am able to catch the browser closing event using javascript. Then I am redirecting the user to another aspx page, which has a code to delete the files.
// default.aspx: javascript function being called at onunload event.
function deleteFile()
{
window.open("test.aspx");
}
// test.aspx page
File.Delete("C:\\test.txt); // delete the file
// close the test.aspx page
string strscript = "window.top.close();";
if (!Page.IsStartupScriptRegistered("clientScript"))
{
Page.RegisterStartupScript("clientScript", strscript);
}
This method opens the test.aspx page for few seconds, deletes the file and closes the page.
Is their anyway that I can hide the test.aspx page so that the user cannot see that but still file gets deleted ?
And what if the javascipt is disabled at the user's browser. In that case no files will be deleted.
Any suggestions??
|
|
|
|
|
Hi there,
Gud to hear that you can implement successfully the js code...
chinky singh wrote: Is their anyway that I can hide the test.aspx page so that the user cannot see that but still file gets deleted ?
IMO, No way... to hide the window. But just a suggestion, you might take a look at AJAX to implement they way client call a server-side function. So that when the browser is closed, call a server-side function to delete the file. Not tried with it yet
And also, have a question... Why do want to hide the dialog?
chinky singh wrote: And what if the javascipt is disabled at the user's browser. In that case no files will be deleted.
IMO, You can detect that if the client is supporting JS or not...
<< >>
|
|
|
|
|
Hi
Well their is no specific reason to hide the dialog. I think that is okay for now.
Ok their is a way to check if the JS is supported or not. What can I do if it is not supported? How can I then still detect the browser close event?
Thanks
|
|
|
|
|
Hi there,
chinky singh wrote: What can I do if it is not supported?
What you can do is that forcing user enable that option to use your site
<< >>
|
|
|
|
|
Hey,
i just want to know how i make a class extend the Thread object ? soo the class itself acts like a Thread ?
I am use to do the following in Java
extend the java.lang.Thread class, and then implement java.lang.Runnable
Then i could just override the Run() method, and i could create a new thread by instanciating my class like MyThreadClass tc = new MyThreadClass();
and call tc.Run() to make the thread start.
But how is this done in C# .NET ?
I seem to only be able to find examples which passes delegates to the Thread.
Like Thread myThread = new Thread(new ThreadStart(someMethod));
Can i somehow just extend the System.Threading.Thread class ? and which interface should i Implement ?
Martin
|
|
|
|
|
You can't extend Thread because it is a sealed class.
Skoder wrote: Then i could just override the Run() method, and i could create a new thread by instanciating my class like MyThreadClass tc = new MyThreadClass();
and call tc.Run() to make the thread start.
I'm not sure 100% what kind of effect you are going for here. You could have a class that implements the equivalent to Runnable. Then override the Run method to spawn a thread that calls a method in that class.
Jared Parsons
jaredp@beanseed.org
http://spaces.msn.com/members/jaredp/
|
|
|
|
|
Hey,
thanks for the answer.
Yes i found out that it was a sealed class according to msdn.
But isnt there some way to make a class behave like a Thread ?
Or is the only way to create instances of a Thread and pass a delegate ?
|
|
|
|
|
Skoder wrote: But isnt there some way to make a class behave like a Thread ?
What type of behavior are you wanting? Can you give us a code sample and describe what you want to happen?
Skoder wrote: Or is the only way to create instances of a Thread and pass a delegate ?
That's the best way (IMHO).
Jared Parsons
jaredp@beanseed.org
http://spaces.msn.com/members/jaredp/
|
|
|
|
|
Actually, it's recommended you use the thread pool instead of creating threads yourself. You can use the ThreadPool to run background tasks via ThreadPool.QueueUserWorkItem(...).
Optionally, if you're trying to do work on a background thread which needs to return data to the UI thread, use System.ComponentModel.BackgroundWorker (.NET 2.0), which takes care of getting the calls on the correct thread for you.
Tech, life, family, faith: Give me a visit.
I'm currently blogging about: Bought a House!
Judah Himango
|
|
|
|
|
That's not true. Creating a thread yourself is just fine and provides a different set of features that you can't get through the ThreadPool. For example you can't Join, Abort or check the state of items in the ThreadPool.
Jared Parsons
jaredp@beanseed.org
http://spaces.msn.com/members/jaredp/
|
|
|
|
|
I didn't say it was disallowed or discouraged. Microsoft simply recommends using the thread pool over creating your own thread for performance and efficiency reasons. See this article[^] for more information.
|
|
|
|
|
Your original statement was more a blanket statement. I figured you didn't mean it to be all encompasing but I wanted to be explicit for the people who are just starting out with threads.
Jared Parsons
jaredp@beanseed.org
http://spaces.msn.com/members/jaredp/
|
|
|
|
|
Hey again,
i just want to make a class which acts like a thread.
Soo i can have private varibles, lists, methods and other stuff which is only used in that single Thread. (thats how it is done in Java).
Soo i can just do something like
myThread t = new myThread(var1, var2);
t.Run();
it is just for because i want to seperate it.
But i guess i can just do the following on the class i want to be a thread:
class myThread {
public myThread(var1, var2) {
Thread t = new Thread(new ThreadStart(Run));
}
public void Run() {
bla bla bla
}
}
It will basically work the same way.
|
|
|
|
|
You can use
int var1, string var2;
ThreadPool.QueueUserWorkItem(methodToCall, new object[] {var1, var2});
void MethodToCall(object arguments)
{
object[] args = (object[])arguments;
int var1 = (int)args[0];
int var2 = (string)args[1];
}
Note that if you're using .NET 2.0, you can use anonymous methods (basically blocks of code inside a function) to make this a lot easier and more typesafe. For example,
int var1, string var2;
ThreadStart methodToExecuteWithVariables = delegate
{
};
new Thread(methodToExecuteWithVariables).Start();
Tech, life, family, faith: Give me a visit.
I'm currently blogging about: Bought a House!
Judah Himango
|
|
|
|
|
Hi again,
I have a textbox where the text is longer than the textbox width. When I type text in and leave, the beginning of the string shows, and focus goes on to the next box. But if I don't change the text (just tab through or whatever), the beginning of the string is cut off, leaving the end of the string visible. I do use textbox.SelectionStart = 0; , but it it only works if text is changed.
Any suggestions???
Thanks again,
Mel
|
|
|
|
|
Hm..
Maybe try to add [code]textbox.SelectionStart = 0;[/code] to the LostFocus event?
|
|
|
|
|
That's the weird part, I have the FocusLeave event.
private void txtBoxLeave(object sender, System.EventArgs e)
{
textbox.SelectionStart = 0; ...
}
Again, it works when the text is altered (even if it ends up being the exact same text), but not if nothing at all is done.
Mel
|
|
|
|
|
Maybe you can cheat a little bit?:
private void txtBoxLeave(object sender, System.EventArgs e) {
if (textbox.Text.Length > 0) {
textbox.SelectionStart = 1;
}
textbox.SelectionStart = 0;
}
Dunno if this works though...
Pompiedompiedom...
"..Commit yourself to quality from day one..it's better to do nothing at all than to do something badly.."
-- Mark McCormick
|
|
|
|