|
If I have a sub routine/function with several parameters say 8 and I wanted to make the thread a background process or thread it in some way how could I accomplish that?
I see with System.Threading.ThreadPool.QueueUserWorkItem() that I can pass in single param but obviously that does not work here.Humble Programmer
|
|
|
|
|
programmer_vb.net_c++ wrote: but obviously that does not work here.
obviously a single parameter is everything you will ever need, as you can create a little class (or struct), stuff anything in there you want, then pass a reference as the single parameter.
There is one alternative that I often prefer: rather than having a data-only class, make a job class that holds all the parameters you want and also includes the code it needs. You can encapsulate a Thread or a BackgroundWorker, you could even inherit from BackgroundWorker (not from Thread as that class is sealed). That way all the threading is hidden inside that class.
|
|
|
|
|
Again Luc to rescue.
Thank you again.Humble Programmer
|
|
|
|
|
You're welcome.
|
|
|
|
|
I am in a project that has no multithreading. I understand the multithreading concepts and I can write basic apps but most places in our apps that I believe would benefit from multithreading we are accessing controls on the form so of course I get the cross threaded operation error.
Is there an elegant solution to updating UI elements from a secondary thread.
An example would be like having a secondary thread retrieve data from the DB and update the UI with the current info.
Another thing, are there any tools or ideas of how I can decide which parts of my application would benefit most multithreading.
This is sad but it is true, I came into developing in tried to be productive immediately so many important concepts got left behind and each time I try to implement new things that I have learned it seems that I am always fighting the basic design of the application.Humble Programmer
|
|
|
|
|
Hi,
This[^] tackles the thread crossings.
Multi-threading is useful:
- when independent operations could and should occur at the same time, rather than in a fixed and sequential order;
- when your app is compute bound and your system has more than one core, not all of them busy right now.
There is no need for tools to analyze this, just a bit of common sense should suffice.
|
|
|
|
|
Multi-threading is useful:
- when independent operations could and should occur at the same time, rather than in a fixed and sequential order;
I guess that is alot of the issue we are having is that everything is so structured in the order that there are only a few instances that I can think of that we can go on about are way and not worry about the thread finishing before we move on...
For example I would think that retrieving data on a separate thread would be a good idea but there is not really anything for the user to be doing before they have the information.
Or saving the data on a separate thread but then the information might not be available if they went right back into the form..Humble Programmer
|
|
|
|
|
Hi,
as I don't know anything about your app, I can only give general ideas and examples.
independent operations:
- example: reading data from two serial ports; if you intertwine read operations on a single thread, then the slowest port will dictate the speed of both; with asynchronous events or threads, both ports would evolve at their own speed.
- example: reading data from a disk file and from a network; the inherent speed of each could vary, so best results require independent operation
A decent app keeps the GUI free by delegating all jobs that take time (calculations > 100 milliseconds), or potentially take time (reading file over network) to separate threads. Net result:
- the GUI remains alive, if another window moves over it, or the user clicks minimize/maximize, it will still react;
- the GUI should offer progress information;
- the GUI should offer a cancel option.
Doing this properly requires at least one extra thread.
|
|
|
|
|
Insightful as usual Luc.
Thank you again for your time and plethora of knowledge.
Humble Programmer
|
|
|
|
|
Read this[^] for modifying control from a non-GUI thread.
programmer_vb.net_c++ wrote: Another thing, are there any tools or ideas of how I can decide which parts of my application would benefit most multithreading.
The only tools that could suggest something are profilers, like ANTS. But, they won't come out and tell you that "this could be better served by multi-threading". You have to interpret what you see and look at the design of your data model to make such a decision. The question you'll be asking is if that operation can be broken into chunks that more than one thread can process at the same time. There is no hard-and-fast rule to follow.
|
|
|
|
|
great link!
|
|
|
|
|
Good article!
|
|
|
|
|
Hello,
I downloaded following Chess program written in classical VB, however after trying to convert it to VB.Net code via the conversion wizrd I got numerous errors which I couldn't resolve. Since I'm not familiar with VB.net, I need someone instruct me on the problem or provide me the upgraded code.
Many Thanks in Advance
Link to program: Migoya ChessReal Eyes Realize Real Lies.
|
|
|
|
|
Which version of the converter are you using.
Although I have little to no experience with it I hear that the 2005 converter is much better than previous versions.Humble Programmer
|
|
|
|
|
I'm using visual studio 2008.
The problem is just about handling of arrays (as compiler listed the errors). But I think with a little work it can be surmounted.Real Eyes Realize Real Lies.
|
|
|
|
|
There's just WAY too much information to go over and way too many possible problems. There's no way to answer your question in the form you want.
Personally, I don't recommend the Upgrade Wizard at all. There is no coversion tool that will do a good conversion with no errors. You're just going to have to rewrite from scratch or find an example in VB.NET.
|
|
|
|
|
Every application we have has been "converted" from VB6 which was actually rewriting the applications from scratch and only using the VB6 as a basic model. Humble Programmer
|
|
|
|
|
I am getting an error that I cannot reproduce in the dev environment..
Here is the information I have captured from the deployed app.
Please tell me what this means if it means anymore to you than myself. Also it would be cool if you could tell me why my stack trace does not show the line numbers like many other stack traces that I have seen.
This error is very random there does not seem to a consistent set of steps that causes it.
Error number 5
T Create__Instance__[T](T)
An error occurred creating the form. See Exception.InnerException for details. The error is: Exception has been thrown by the target of an invocation.
Stack trace
at ClientDBv3.My.MyProject.MyForms.Create__Instance__[T](T Instance)
at ClientDBv3.frmClientCommon1..ctor()
at ClientDBv3.frmMainForm.sCallClientScreen(Int64 lUniqueNumber, String tMode)
at ClientDBv3.frmMainForm.btnOpen_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
thank you.Humble Programmer
|
|
|
|
|
Hi,
in order to provide line numbers, the EXE (and the DLL files it depends on) need the presence of the PDB files next to the files they relate to.
The actual situation and problem description is too vague to work on.
|
|
|
|
|
So I would have to deploy in Debug mode this that correct?
If my understanding is correct the only problem that deploying like would cause is that somethings would not be optimized is that a correct assumption.Humble Programmer
|
|
|
|
|
deploy a debug build and include the PDB file(s), that is what I recommend.
|
|
|
|
|
Do you know what the error could be referring to? Humble Programmer
|
|
|
|
|
Just on a hunch, are you using the "default form instance" facility that VB.NET provides to help with upgrading VB6 apps? My guess is that there is some problem that is occurring the first time you use frmClientCommon1.
Did you do what the error message suggested and look at the InnerException? The inner exception should provide you with more useful information about what is going wrong.
Also, as a general tip, think about what is different between the dev environment and production environment. Different connection strings needed? Missing data files? Registry settings? Basically anything that might be set up differently.
|
|
|
|
|
Hi,
Im looking for a good VB article that i need to use in a renewal automation for an insurance product. Found the hands on labs for windows workflow (VB.net) edition and half of its in C#, which isn't a problem but i have a tight deadline to follow.
Many thanks
Simon Whale
|
|
|
|
|
You, more than liekly, won't find one for such a specific requirement. Your best bet is to learn from other examples and write your own. C# is easily convertible to VB.NET, so you've already got examples. If you were looking for copy'n'paste code, you will not find any.
|
|
|
|