下面是我的代码(一个按钮事件,WPF的):
private void partition_button_Click(object sender, RoutedEventArgs e)
{
if (value_judgement(partition_textBox1.Text))
{
if (partition_textBox2.Text != null && !partition_textBox2.Text.Equals(""))
{
textBlock.Text = "正在生成补丁,请稍候...";
String dirName = partition_textBox2.Text;
int datasize = int.Parse(partition_textBox1.Text);
Boolean isComplete = new OperationCenter().partition_operation(datasize, dirName);
if (isComplete)
{
textBlock.Text = "";
MessageBox.Show("分区补丁生成成功!并且已经自动签名,如需要,请自行重命名文件", "提示", MessageBoxButton.OK);
}
else
{
textBlock.Text = "";
MessageBox.Show("分区补丁生成失败!请检查后重试", "提示", MessageBoxButton.OK);
}
}
}代码的作用是:当主窗口上partition_textBox2和partition_textBox2这两个文本框都不为空时,将主窗口上的textBlock文本框中的文本设置为"正在生成补丁,请稍候..."后,调用另一个类中的partition_operation方法进行补丁生成操作。无论成功与否,都擦除textBlock中的文本内容并弹框提示。现在的问题是,点击按钮以后,textBlock中并未出现文本内容,其他一切正常,在生成补丁的过程中,主窗口就僵住了。而当我删除textBlock.Text = "";代码后,则出现补丁生成完成之后textBlock中才出现"正在生成补丁,请稍候..."的文本,正常情况下不是应该先执行产生文本的语句吗?而且,我以前在编Java程序的时候也是这样,一旦点击按钮处理一个任务的时候,主窗口就僵住了,不接受任何操作与反馈。这个问题都不知道该怎么百度搜索才好了,一直没解决。大家有谁知道是怎么回事吗?难道要为任务操作都使用新线程才行吗?
private void partition_button_Click(object sender, RoutedEventArgs e)
{
if (value_judgement(partition_textBox1.Text))
{
if (partition_textBox2.Text != null && !partition_textBox2.Text.Equals(""))
{
textBlock.Text = "正在生成补丁,请稍候...";
String dirName = partition_textBox2.Text;
int datasize = int.Parse(partition_textBox1.Text);
Boolean isComplete = new OperationCenter().partition_operation(datasize, dirName);
if (isComplete)
{
textBlock.Text = "";
MessageBox.Show("分区补丁生成成功!并且已经自动签名,如需要,请自行重命名文件", "提示", MessageBoxButton.OK);
}
else
{
textBlock.Text = "";
MessageBox.Show("分区补丁生成失败!请检查后重试", "提示", MessageBoxButton.OK);
}
}
}代码的作用是:当主窗口上partition_textBox2和partition_textBox2这两个文本框都不为空时,将主窗口上的textBlock文本框中的文本设置为"正在生成补丁,请稍候..."后,调用另一个类中的partition_operation方法进行补丁生成操作。无论成功与否,都擦除textBlock中的文本内容并弹框提示。现在的问题是,点击按钮以后,textBlock中并未出现文本内容,其他一切正常,在生成补丁的过程中,主窗口就僵住了。而当我删除textBlock.Text = "";代码后,则出现补丁生成完成之后textBlock中才出现"正在生成补丁,请稍候..."的文本,正常情况下不是应该先执行产生文本的语句吗?而且,我以前在编Java程序的时候也是这样,一旦点击按钮处理一个任务的时候,主窗口就僵住了,不接受任何操作与反馈。这个问题都不知道该怎么百度搜索才好了,一直没解决。大家有谁知道是怎么回事吗?难道要为任务操作都使用新线程才行吗?
解决方案 »
- 求大神把下面c#的代码转换成Java的。。
- namespace 'CompilerServices' does not exist in the namespace 'Microsoft.VisualBasic',在线等,谢谢
- 是否有办法防止被探测到使用了代理?
- C#图片问题!!!!
- 如何修改其他程序窗口的标题啊,帮帮忙啊,谢谢了。
- 这个问题可能也是白问。
- 一个关于数据库数据保存的问题
- 为什么我的这个判断怪怪的?
- 大神们,我想问一下,WPF如何将输入控件的内容,比如说表格里的TEXTBOX内容存入XML文件中?
- 委托的匿名函数
- 提一个关于XPO的问题(ORM的一个框架),希望用过的人回答下。
- C# RegEnumValue如何获取值啊只能获取名称
解决办法:
将主线程上的比较耗时的操作,另开线程(异步)进行,避免UI假死。
一,通过委托,textBlock是主线程创建的资源,其他线程想修改直接textBlock的属性是不允许(非安全),其他线程只能通过委托的方法进行。
二,获取textBlock所在窗口句柄,其他线程通过SendMessage Win32API函数向窗口发送消息,由主线程自己来更新。上面两种方法都可以,标准做法是[方法一],但是以前我用[方法一]做的时候,譬如修改textBlock的Text内容时,不能及时的反应上去(要通知UI重绘)。具体用上面方法,你自己斟酌吧。