public partial class Form1 : Form
{
Thread th;
public Form1()
{
InitializeComponent();
}
private void btnRun_Click(object sender, EventArgs e)
{
th = new Thread(new ThreadStart(RunLoad));
th.Start();
} protected void RunLoad()
{
long i; ProgressBar tpb =progressBar;
ListBox tlb = lb; tlb.Items.Clear(); tpb.Maximum = 10000;
tpb.Minimum = 0;
int max = 65535; for (i = 0; i <= max; i++)
{
int current = (int)(((float)i / (float)max)*10000);
tpb.Value = current;
//progressBar.Refresh(); tlb.Items.Add(i.ToString());
}
} private void btnStop_Click(object sender, EventArgs e)
{
if (th != null && th.ThreadState == ThreadState.Running)
{
th.Abort();
}
} private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (th != null && th.ThreadState == ThreadState.Running)
{
th.Abort();
}
}
}progressBar是Form1的一个ProgressBar
lb是Form1的一个ListBox但是如程序所写
th线程启动RunLoad函数后RunLoad函数可以直接访问progressBar和lb,这两个空间不是属于窗体主线程的吗?为什么附线程可以直接访问?
请LZ测试后再提问,另外确保你没有把Control.CheckForIllegalCrossThreadCalls设为false
运行状态下CheckForIllegalCrossThreadCalls默认为False忘说了我是在运行状态下测试的
http://zwkufo.blog.163.com/blog/static/25882512009111453957552/?hasChannelAdminPriv=true
form1只不过是主线程,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.不知说的对不对,请高手指正