在用户控件中,除了主线程之外我还有一个线程来处理数据,然后在这样的文本框中显示结果
private delegate void SetTextCallback(string text);
private void SetText(string text)
{
if (!Dispatcher.CheckAccess())
{
Dispatcher.Invoke(new SetTextCallback(SetText), text);
return;
}
txtResult.Text = text;
}
private void ProcessThread()
{
string result = "";
// process ...
SetText(result);
}
在第一次应用程序运行时,此用户控件运行良好。如果我再次关闭并打开它,它就无法正常工作。然后我调试到SetText函数,txtResult.Text显示已经分配了值,但它在UI上是空的。我尝试使用其他控件,如启用按钮,但结果是相同的:在调试中,控件已保持新值但不在UI上。我感觉这个线程得到了封闭用户控制的控制。
有人可以告诉我什么是错的吗?在此先感谢,抱歉英语不好。
更新
我的主题启动:
private Timer _timer;
public MyUserControl()
{
InitializeComponent();
_timer = new Timer(ProcessThread);
}
我在哪里调用我的帖子
private void _OnSomeCustomEvent(object sender)
{
if (sender != null)
{
_timer.Change(TimeSpan.FromSeconds(5), TimeSpan.FromMinutes(10));
}
}
答案 0 :(得分:0)
移动txtResult.Text = text;内部调度员调用
Dispatcher应该用于从后台线程访问UI控件
这应该有效