In a C#.NET windows application (winforms) I set the visibility of the checkbox to false:
checkBoxLaunch.Visible = true;
I started a thread.
Thread th = new Thread(new ThreadStart(PerformAction));
th.IsBackground = true;
th.Start();
开发者_StackOverflow中文版The thread performs some stuff and sets the visibility to true:
private void PerformAction()
{
/*
.
.// some actions.
*/
checkBoxLaunch.Visible = true;
}
After the thread finishes its task, the checkbox is not visible to me.
What am I missing?
You shouldn't make UI changes within a non-UI thread. Use Control.Invoke
, Control.BeginInvoke
or BackgroundWorker
to marshal the call back to the UI thread. For example (assuming C# 3):
private void PerformAction()
{
/*
.
.// some actions.
*/
MethodInvoker action = () => checkBoxLaunch.Visible = true;
checkBoxLaunch.BeginInvoke(action);
}
Search for any of Control.Invoke, Control.BeginInvoke or BackgroundWorker to find hundreds of articles about this.
精彩评论