1. create controls in a seperate thread
2. Changing ProgressBar in a seperate Thread
Hello,
I want to change a ProgressBar in a separate Thread.
My current code is the following:
private void changeProgressBarThread()
{
changeProgressBar();
}
private void changeProgressBar()
{
toolStripProgressBar1.Maximum = 100;
for (int i = 0; i <= 100; i++)
{
toolStripProgressBar1.Value = i;
if (i == 100)
{
for (int j = 100; j >= 0; j++)
{
toolStripProgressBar1.Value = j;
}
i = 0;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
ThreadStart thrdDeleg1 = new ThreadStart(addDataSetThread);
Thread addDSThrd1 = new Thread(thrdDeleg1);
ThreadStart thrdDeleg2 = new ThreadStart(changeProgressBarThread);
Thread addDSThrd2 = new Thread(thrdDeleg2);
addDSThrd1.Start();
addDSThrd2.Start();
while (addDSThrd1.IsAlive)
{
if(!addDSThrd1.IsAlive)
addDSThrd2.Abort();
}
addDSThrd1.Join();
string[] row = new String[3];
row[0] = searchText_;
row[1] = results_.count.ToString();
row[2] = "0";
dgViewData.Rows.Add(row);
}
My problem is now, that I cannot use the toolStripProgressBar1 object:
"Cross-thread operation not valid: Control '' accessed from a thread
other than the thread it was created on."
I understand the error message but... How can I fix the error?
I do not know how to update my progress bar if I cannot update it in my
seperate thread.
How do you do that?
It would be nice if you could give me a small example.
And my other question concerns the following code lines:
while (addDSThrd1.IsAlive)
{
if(!addDSThrd1.IsAlive)
addDSThrd2.Abort();
}
I think these lines of code are not very well/ secure,
because it looks bit like an endless loop.
How do you let another thread (here my progress bar thread) stop if a
long calculation in another thread is finished?
Regards,
Martin
3. how to run a window on a seperate thread - CSharp/C#
4. Timer doesn't work in seperate thread
I've set up a seperate thread and put a timer in it but for some reason it's
tick event is never fired. This is what I have...
...
Thread timerThread = new Thread(new ThreadStart(startTimer));
timerThread.Start();
...
private void startTimer()
{
System.Windows.Forms.Timer idleTimer = new System.Windows.Forms.Timer();
idleTimer.Interval = 1000;
idleTimer.Tick += new System.EventHandler(idleTimer_Tick);
idleTimer.Start();
}
private void idleTimer_Tick(object sender, System.EventArgs e)
{
System.Console.WriteLine("Time Reached!");
}
If I put a breakpoint on the WriteLine statement it never gets run and I
can't figure out why.
Any ideas?
Darrell
5. Windows Form in seperate thread - CSharp/C#
6. UserControl always run in seperate thread
I need a control to always run in a separate thread from the application. I'm not too sure where to begin with this since the control could be dropped on the form at design time. One possible idea I had was to wrap my control in another control which creates the thread and than creates the control. Any suggestions? -Joe
7. Fully functional form in a seperate thread - CSharp/C#
8. Loading webbrowser in seperate threads
I have a need to create an instance of the webbrowser control in seperate
threads and display each on seperate forms in an MDI application. The
hosting site knows if the browser is in the same thread and will not isolate
the sessions for me. I can open seperate instances of IE or Netscape and
the site works fine, however it will not work fine in tabbed pages. So I
want to be able to have a singular application with mutliple browsers.
I think that I am creating the instance of my usercontrol in the wrong
manner but am unable to figure out what I need to change about it.
I am using C#'08
Thanks in advance and Happy Holidays
What I have done is:
project1 the dll
1. Create an interface to interact with the webbrowser control
public interface IMyBrowser
{
void StartUp();
}
2. Create a custom usercontrol that hosts the webbrowser control that
implements the interface
public class MyBrowser: UserControl, IMyBrowser
{
public void StartUp()
{
this.browser.Navigate(@MyWebsite);
}
}
Project2 the executable
1. Added a reference to the dll
2. Created a mdi form to host the mdi children
void MenuItemClick(...)
{
frmBrowser f = new frmBrowser();
f.mdiParent = this;
f.Show();
}
3. Created a mdi child form to host the browser control from the dll
public void frmBrowser()
{
InitializeComponent();
MyDll.MyBrowser instance =
(MyDll.MyBrowser)GetInstance<MyDll.IMyBrowser>();
if(instance != null)
{
this.controls.add(instance);
instance.dock = DockStyle.Fill;
instance.StartUp();
}
}
private object GetInstance<T>()
{
object instance = null;
string[] files =
Directory.GetFiles(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
"*.dll");
foreach (string file in files)
{
Trace.WriteLine("Loading " + file);
try
{
Assembly assembly = Assembly.LoadFile(file);
foreach (Type type in assembly.GetTypes())
{
if (!type.IsClass || type.IsNotPublic) continue;
Type[] interfaces = type.GetInterfaces();
if (((IList)interfaces).Contains(typeof(T)))
{
instance = Activator.CreateInstance(type);
break;
}
}
}
catch (Exception ex)
{
//throw;
}
}
return instance;
}