c#跨线程访问控件,为什么Thread对象不能写在方法里面

代码如下.(若将Threadt1=null;写在button1_click()方法里面,,当第二次单击(即暂停线程),t1则为null.namespace窗体应用程序{d... 代码如下.(若将Thread t1 = null;写在button1_click()方法里面,,当第二次单击(即暂停线程),t1则为null.
namespace 窗体应用程序
{
delegate void DGSetLabel(string str);
public partial class Form1 : Form
{

DGSetLabel dgSetLabel = null;

public Form1()
{
InitializeComponent();
dgSetLabel = new DGSetLabel(Setlabel);
}
Thread t1 = null;

private void button1_Click(object sender, EventArgs e)
{
t1.IsBackground = true;
if (btnStart.Text == "开始")
{
t1 = new Thread(SetlabelSafety);
btnStart.Text = "停止";
t1.Name = "t1";
if (t1 != null)
{
t1.Start();
}
}
else if (btnStart.Text == "停止")
{

if (t1 != null)
{
btnStart.Text = "开始";
t1.Abort();
}
else
{
MessageBox.Show("t1==null");
}

}
}

private void Setlabel(string msg)
{
lblNum.Text = msg;
}
private void SetlabelSafety()
{
Random rnd = new Random();
while (true)
{
this.Invoke(dgSetLabel, rnd.Next(0, 10).ToString());
Thread.Sleep(100);
}

}

}
}
展开
 我来答
匿名用户
2014-08-02
展开全部
线程如果是个死循环 你想想程序会不会一直卡在某个语句不动了呢 线程虽然独立于主UI线程 但是你启动线程的语句在程序执行的过程中是要跳出的 否则会卡在t1.start();这一行 那样你如何修改btn的caption
追问
为什么说当线程是个死循环的时候,程序会一直卡在某个语句不动了?为什么会不动了呢?CPU不是会强制切换线程的吗.
还有,我还是不明白,当Thread t1 = null;写在button1_click()方法里面 当第二次单击(即我想暂停线程),但此时若没有写t1=null判断时,button1_click()方法会有“System.NullReferenceException”异常.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式