|
I made a windows form app that executes a query to an Oracle database. It takes about 5 seconds for the query to execute. If a user presses the button and it takes 5 seconds, they might think its not working.
I want to display a message while it executes the query. The whole query is wrapped up in a function called “ConnectToOracle()”. Obviously it is of type void. I tried to make a while loop that did this…
ConnectToOracle();<br />
<br />
While (ConnectToOracle)<br />
<br />
{<br />
<br />
Label1.visible = true; <br />
<br />
}
It gave me an error that said cannot implicitly convert type ‘void’ to ‘bool’.
Is there anyway I can do this??
Thank you!
Apoc
|
|
|
|
|
Alternately put the label display calls inside ConnectToOracle() on either side of the db operations. You should consider doing this in a seperate thread though so it doesn't lock the GUI.
<br />
void ConnectAndShowWait()<br />
{<br />
Label1.visible = true;<br />
<br />
ConnectToOracle();<br />
<br />
Label1.visible = false;<br />
}
|
|
|
|
|
A while clause expects a boolean value. while(somethingIsTrueOrFalse). Since ConnectToOracle is returning void, while won't work.
What you need is a seperate thread of execution to connect to the database, keeping your UI thread alive and functional. To do this:
using System.Threading;
ThreadStart methodToExecute = new ThreadStart(ConnectToOracle);
Thread oracleReaderThread = new Thread(methodToExecute);
oracleReaderThread.Start();
This will keep your UI thread responsive because it's not actually doing anything. The background oracleReaderThread will begin executing in the background.
Tech, life, family, faith: Give me a visit.
I'm currently blogging about: Bought a House!
Judah Himango
|
|
|
|
|
Wow! That made a huge difference! Thanks so much!
Apoc
|
|
|
|
|
Don't be fooled about speed difference. It will still take just as long (in fact, probably longer on a single-processor machine) to read the data from the database. It's just that the reading won't block your UI thread, which makes everything appear responsive & fast. Users like this. Just beware that multithreading can get very hairy; threads sharing states, threads accessing the same resource, locking & deadlocks, doing UI stuff on background threads, all are difficulties you'll run into if you use threads. I suggest you do some reading[^] on the subject.
|
|
|
|
|
You could also display a wait cursor:
try {
Cursor.Current = Cursor.Wait;
ConnectToOracle();
} finally {
Cursor.Current = Cursor.Default;
}
|
|
|
|
|
I tried that and it said it did not recognize Wait and Default. Am I using an old version of .net? Is this only for 2.0?
Apoc
|
|
|
|
|
No i was a just a bit too quick:
try {
Cursor.Current = Cursors.WaitCursor;
ConnectToOracle();
}
finally {
Cursor.Current = Cursors.Default;
}
Now it should compile
|
|
|
|
|
Ah.. that worked!
Thanks!
Apoc
|
|
|
|
|
Visual Studio's intellisense function would actually have shown you other cursor-options in a listbox. Use it!
modified 12-Sep-18 21:01pm.
|
|
|
|
|
You can show a Progress bar to the user which increments its value by 20 for every second. When 5 seconds will complete, the progress bar will reach 100 i.e. maximum. By this way the user will be assured that something is going on and he will be satisfied
Regards
Sandeep
+919891027854
A student knows little about a lot.
A professor knows a lot about little.
I know everything about nothing.
|
|
|
|
|
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 ?
|
|
|
|