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");
就可以了。
版权声明:本文标题:C#中子线程修改主线程中textBox的内容 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1705561290h490020.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论