admin 管理员组

文章数量: 887021


2024年1月18日发(作者:java官网哪里下载jdk)

在编写小软件的过程中,用到了线程操作。但是其中有一个问题是,创建的子线程想修改主程序的textBox的内容,原先的想法就是在子进程调用的函数中直接修改主程序的textBox属性,但是得到的结果是:程序崩溃。原因是线程间进行了不安全的调用……代码如下:

private void downloadFile()

{

DownloadClass dd = new DownloadClass();

string temp;

temp = ne();

while (temp!=null)

{

= temp;

eName = fileSavePath + "" + dealPicName(temp);

adFile();

Text(or + "n");

temp = ne();

}

("下载工作圆满完成!", "恭喜",

, ation);

}

//使用线程技术

oThread = new Thread(new ThreadStart(adFile));

();

从上面的代码中可以看到,子线程执行downloadFile函数,该函数中,修改了主程序中的tBoxResult的属性,这样调用,属于不安全调用。

解决方案:

加入如下函数

//线程间安全调用windows空间

delegate void SetTextCallback(string text);//后加的,好好想一想,参数是SetText带的参数。

private void SetText(string text)

{

// InvokeRequired required compares the thread ID of the

// calling thread to the thread ID of the creating thread.

// If these threads are different, it returns true.

if (Required)

{

SetTextCallback d = new SetTextCallback(SetText);

(d, new object[] { text });

}

else

{

Text(text);

h();

}

}

现在在子线程中想修改主程序中的textBox的属性就易如反掌了。只需要就downloadFile函数中的

Text(or + "n");

替换为

t(or + "n");

就可以了。


本文标签: 线程 函数 调用 主程序 修改