如何在子线程中操作窗体上的控件
2013-10-06 07:41
225 查看
一般来说,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提供了Invoke的方法,其作用就是让子线程告诉窗体线程来完成相应的控件操作。
现在用一个用线程控制的进程条来说明,大致的步骤如下:
1.
创建Invoke函数,大致如下:
///<summary>
/// Delegate function to be invoked by main thread
///</summary>
private
void InvokeFun()
{
if( prgBar.Value < 100 )
prgBar.Value = prgBar.Value + 1;
}
2.
子线程入口函数:
///<summary>
/// Thread function interface
///</summary>
private
void ThreadFun()
{
//Create invoke method by specific function
MethodInvoker mi = new MethodInvoker(
this.InvokeFun );
for(
int i = 0; i < 100; i++ )
{
this.BeginInvoke( mi );
Thread.Sleep( 100 );
}
}
3.
创建子线程:
Thread thdProcess = new Thread(
new ThreadStart( ThreadFun ) );
thdProcess.Start();
备注:
using System.Threading;
private System.Windows.Forms.ProgressBar prgBar;
现在用一个用线程控制的进程条来说明,大致的步骤如下:
1.
创建Invoke函数,大致如下:
///<summary>
/// Delegate function to be invoked by main thread
///</summary>
private
void InvokeFun()
{
if( prgBar.Value < 100 )
prgBar.Value = prgBar.Value + 1;
}
2.
子线程入口函数:
///<summary>
/// Thread function interface
///</summary>
private
void ThreadFun()
{
//Create invoke method by specific function
MethodInvoker mi = new MethodInvoker(
this.InvokeFun );
for(
int i = 0; i < 100; i++ )
{
this.BeginInvoke( mi );
Thread.Sleep( 100 );
}
}
3.
创建子线程:
Thread thdProcess = new Thread(
new ThreadStart( ThreadFun ) );
thdProcess.Start();
备注:
using System.Threading;
private System.Windows.Forms.ProgressBar prgBar;
相关文章推荐
- 如何在子线程中操作窗体上的控件
- 如何在子线程中操作窗体上的控件
- 别的不多说先,先记下遇到的问题:如何在子线程中操作窗体上的控件
- 如何在子线程中操作窗体上的控件 线程间操作无效
- 往如何在子线程中操作窗体上的控件
- 如何在子线程中操作窗体上的控件
- 如何在子线程中操作窗体上的控件 (来自 愚翁专栏)
- 如何在子线程中操作窗体上的控件
- 如何在子线程中操作窗体上的控件
- 在C#中子线程如何操作主线程中窗体上控件
- 如何在子线程中操作窗体上的控件
- 在C#中子线程如何操作主线程中窗体上控件
- [导入]如何在子线程中操作窗体上的控件
- 跨线程调用控件时关闭窗体时如何避免出现异常:Cannot access a disposed object.
- 如何:从线程中操作控件
- c#如何跨线程调用窗体控件
- [愚翁专栏]主窗体和子窗体之间如何相互操作对方的控件
- C#之线程、委托,强强联手操作窗体控件...
- c#如何跨越线程调用窗体上的控件 GOOD
- 如何跨线程调用Windows窗体控件