以下是我的代码:
private void exportToExcelButton_Click(object sender, EventArgs e)
{
txtBox.Clear();
txtBox.AppendText("Beginning Export...");
ExportExcel(txtBox);
txtBox.AppendText("Export complete...");
}
我遇到的问题是,无论何时单击按钮(执行上述功能),只清除TextBox(System.Windows.Forms.TextBox
)中当前文本的一部分,并替换为第一行:“开始出口......“。
但是,一旦函数ExportExcel(txtBox)
执行完毕,然后整个文本将被ExportExcel(txtBox)
中生成的新文本替换。
在ExportExcel(txtBox);
内部,我有几个txtBox.AppendText()
语句向用户解释正在进行的操作。
我尝试使用txtBox.Text = String.Empty;
和txtBox.Text = "";
清除文字但两项都没有效果。
如果有任何事情需要澄清,请告诉我,谢谢。
答案 0 :(得分:4)
看起来你正在阻止GUI线程,阻止文本框重绘自己。这就是为什么不应该在GUI线程上执行长时间运行的任务的原因之一。 Use a background thread instead.这样你就可以让GUI线程自由地执行绘图,响应鼠标点击等重要操作。
答案 1 :(得分:1)
我同意dvnrrs。但是,如果您无法执行此操作,请在添加每行文字后尝试拨打txtBox.Refresh();
。
还有一种名为Application.DoEvents();
的方法具有类似的行为,但its use is not recommended因为它会使正常的应用程序流短路并导致应用程序意外失败或做出奇怪的事情。< / p>
答案 2 :(得分:1)
在调用txtBox.AppendText(“Beginning Export ...”)之前,您是否尝试过textBox。Refresh。
该方法使控件无效。
另一方面,如果您使用后台线程,则应仅通过覆盖Progress Changed事件来更新UI。后台线程不用于更新用户界面。尝试搜索工作线程和UI线程。它们与MFC相关,但概念是相同的。
另请注意cross thread calls。