|
Simply put, if you are waiting for more than one thing to happen, you use threading.
If you both want to wait for a process to finish, and wait for user input at the same time, you use a background thread for the process. If you run the process in the main thread, the program will not respond to any user input at all until the process is finished.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
Hi,
multi-threading is all about performance; there are two reasons to add some threads
(although these reasons often converge):
1. overall behavior
to increase parallellism: you want several things to go on at the same time, without
one affecting the other more than necessary (they inherently interfere with each other
because of limited resources, such as CPU cycles or memory bandwidth).
So you add threads to decouple logically distinct activities.
Example: one thread can do a database access, another an Internet fetch, yet another
a complex computation. It would not make much sense to let the database activity wait
on an unrelated Internet reply or an unrelated computation.
The most obvious wish for parallellism is in the GUI: you want to be able to
move, resize, close, ... your form(s) at all times, don't you? Therefore an interactive
application should reserve one thread (normally the main thread, also called GUI thread)
for dealing with the GUI, the windows messages, etc; all actual operations (database,
betwork, calculations) should be delegated to threads.
2. fastest execution
to improve performance: if you want a process to be completed as soon as possible,
then it does not make sense to have system resources (CPU power, bus bandwidth, ...)
less active than they could be, i.e. you want to have maximum chance of code being ready
for execution. Having only one thread to execute all code often is not the right way then.
With this in mind you might consider adding threads to execute identical jobs, each handling
part of the data. For performance reasons this typically does not help beyond a few threads,
since they would compete with each other for system resources (there is only so much a disk
or a network can offer). If the actual bottleneck is CPU power, then I would recommend
not to exceed 2*Environment.ProcessorCount
Final comments:
1.
multi-threading always needs thread synchronization and/or interthread communication;
you can not just have a number of threads working on shared data without protecting the
data from becoming inconsistent; the Thread class, as well as mutexes, locks, and the like
will support this.
2.
the GUI Controls are not thread-safe; Windows requires that a Control only be accessed
by the thread that created it (normally the GUI thread for all of them, since they typically
are all linked in one big hierarchy). When other threads need to report and show some
results using the GUI, there is an Invoke mechanism, supported by Control.InvokeRequired
and the methods Control.Invoke() or BeginInvoke() methods.
3.
threads are either foreground or background; all foreground threads must finish before
your app can exit. As a result it often is best to use background threads for things
that should go on in the background and not prevent an app from exiting.
|
|
|
|
|
Thanks for the great detail and time you took to reply to this.
the one that im interested in looking more into is
The part you wrote here
the GUI Controls are not thread-safe; Windows requires that a Control only be accessed
by the thread that created it (normally the GUI thread for all of them, since they typically
are all linked in one big hierarchy). When other threads need to report and show some
results using the GUI, there is an Invoke mechanism, supported by Control.InvokeRequired
and the methods Control.Invoke() or BeginInvoke() methods.
any quick examples to look at , at all Luc ..
kind regards
Robbo
|
|
|
|
|
vbbeg wrote: any quick examples to look at
Hi,
the world is full of examples, just search InvokeRequired on CP or Google site.
I even have an example in my Sokoban article, see the last code snippet in the article's
text (it is C# code but the mechanism itself is language independent).
|
|
|
|
|
I am using vb.net 1.1 for desktop application.
While displaying contents of a datatable / dataview in a datagrid, I wish to suppress some columns (foreign keys, few admin fields) which user is not concerned with.
how do I do it?
thanks,
Madhav
|
|
|
|
|
If you are using visual basic 2003 then you can use the following statement
I think the styanx for hidding a column is like this.
datatable.columns(0).columnmapping = Hidden
|
|
|
|
|
Hello,
Thanks for indicating the way. Actual code is
tblMaster.Columns("Id").ColumnMapping = MappingType.Hidden
tblMaster.Columns("IsBillable").ColumnMapping = MappingType.Hidden
where "tblMaster" is datatable, it does work and seems to be correct way of doing this.
Now I am trying to see how the hidden columns will be updated when foreign key values change due to change in name/description of foreign key or when a new record is added.
I will post the concerned code when I check it thoroughly.
thanks once again.
thanks,
Madhav
|
|
|
|
|
infotools wrote: While displaying contents of a datatable / dataview in a datagrid, I wish to suppress some columns (foreign keys, few admin fields) which user is not concerned with.
You could build a query and only select the columns that you want to display using that query, before you bind the datatable to the grid, i.e:
SELECT column1, column2, ... FROM [tableName] WHERE ...
Pete Soheil
DigiOz Multimedia
http://www.digioz.com
|
|
|
|
|
When the User Logs on, make sure his UserGroup is stored in a session variable i.e.
Session("AccessGroup") = row("vchAccessGroupName")
Then in the OnItemDatabound event for the datagrid:
If Session("AccessGroup") <> "Admin" Then
e.Item.Cells(x).Visible = False //////x being the index of the column in the html
End If
That's all really. Hope this helps.
|
|
|
|
|
Hi, i currently using VB.NET and RichTextBox for coding HTML, but how can i display design, do you have any library, please help me.
Thanks
Socheat
|
|
|
|
|
Do you mean design as in tables and images etc?
Lloyd J. Atkinson
"Logic will get you from A to B, but imagination will take you everywhere" -ALbert Einstein
|
|
|
|
|
Yes, i mean like that
Socheat
|
|
|
|
|
Well, I'm not really sure how to do something like that with a Rich text box. I suppose you could use the web browser control? That way it will be able to display web pages in your application, without the need for loads and loads of code.
Lloyd J. Atkinson
"Logic will get you from A to B, but imagination will take you everywhere" -ALbert Einstein
|
|
|
|
|
Hiya,
I was just wondering if there was a way of stopping a form from loading when the application starts in vb.net, and instead using the code in a seperate vb module?
Thanks, any help will be greatly appreciated,
Lloyd A.
Lloyd J. Atkinson
|
|
|
|
|
I believe your choices of startup are form or sub main. what do you want to happen?
'Never argue with an idiot; they'll drag you down to their level and beat you with experience.' ~ anonymous
|
|
|
|
|
Well basically I just want the application to start up, run through the code and without needing a form. I've tried many different ways but I just cant figure it out.
Lloyd J. Atkinson
"Logic will get you from A to B, but imagination will take you everywhere" -ALbert Einstein
|
|
|
|
|
Hi,
if you build a "Console App" it gets started from a DOS prompt and will interact inside
the console; if double-clicked it will open its own console.
if you builw a "Windows App" it by default creates and opens a Form, because Visual Studio
includes a "Application.Run(new Form1())" in your main code; if you just use
"Application.Run()" then no form is created/shown.
Hence: choose Windows App, and omit the form.
|
|
|
|
|
I am taking over an application that consists of using ASP.NET and VB.NET. There are alot of hardcoded values in this application. What are the best practices and where is the best place to store these hardcoded values to get them out of the code?
Thanks in advance for you help.
|
|
|
|
|
caalock wrote: the best place to store these hardcoded values to get them out of the code?
With care. When you pull out hardcoded values and place them in the form of constants at the beginning of your code, make sure when you replace it in the code body, that it is indeed the same value. For example, if you have '1' hardcoded in your code, and in one case it works for '1', and you have to change it in the future, to say, '2', it may break something else.
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
|
|
|
|
|
HI...
If it is a Database application then u can keep in a table...
U can also have them in a text file and read from there as in the case of configuration files
Good Luck
|
|
|
|
|
Hi,
you should put your constants where they belong, i.e. give them exactly the scope they
need. Examples:
- if you need the same constant a couple of times inside a single method, and never
outside it, then it deserves to become a named const at the top of that method;
- if you need the same constant a couple of times inside a single class, and never
outside it, then make it a const class member;
- if your constant is needed in more than one class, put it in some class, and let
the others refer it; never define the same constant more than once.
- if your constant is a general one, put it in a general-purpose class (see Math.Pi).
In all cases, try to give your constants meaningful names.
BTW: there is no need to use constants for numbers that can never change whatever happens;
if you want to iterate the elements of an array, go from 0 to Length-1, and don't make
that 0 a const int ZERO=0 !!
|
|
|
|
|
i had worket vb.net project.i am using msaccess database.how to give print in the form. plz give the sample code
advance thanks for your valuable replay
thanks & regords
velan
|
|
|
|
|
velan wrote: plz give the sample code
No. People around here tend not to do other people's work for them.
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
|
|
|
|
|
velan wrote: i had worket vb.net project.i am using msaccess database.how to give print in the form. plz give the sample code
advance thanks for your valuable replay
So are you trying to print the Form itself (screenshot type thing), or are you trying to get the data from the MS Access Database into a Print Document, build a report, and then print it out (or is it something completely different)?
Pete Soheil
DigiOz Multimedia
http://www.digioz.com
|
|
|
|
|
Drop a MCL Form Print Component[^] on your form and set the settings for where and how you want the constituent parts (labels, text boxes, check boxes, etc. etc.) to print - then call the .Print method and it will print.
|
|
|
|