我正在尝试从另一个线程获取一个简单的标签值,并且已经尝试了3种不同的线程机制(任务,线程,后台工作者),现在我不知道为什么控件不会更新。
我在这样一个不相关的类中有一个方法:
public static void SetOverlayText(string text, bool fade = false)
{
Thread myThread = new Thread(FadeOverlayText);
OverlayForm.SetLabelText(text);
if (fade)
{
myThread.Start();
}
}
和
private static void FadeOverlayText()
{
OverlayForm.ClearLabelText();
}
我的表单是一个常规的窗体,有这种方法:
public void ClearLabelText()
{
this.Invoke((MethodInvoker)delegate
{
StatusText.Text = "Something should happen"
StatusText.Refresh();
});
}
该方法似乎被调用,但没有任何反应。
答案 0 :(得分:0)
您不应该需要Refresh
。
这应该有效:
public void ClearLabelText()
{
if (StatusText.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate
{
StatusText.Text = "Something should happen";
});
}
else
{
StatusText.Text = "Something should happen";
}
}
你是否真的,你使用了正确的控制,而且在任何其他方面都没有改变字符串,所以它似乎不起作用?请检查每件事。
另外可以肯定的是,你只在第二个帖子中调用ClearLabelText
一次,因为ClearLabelText
完成后,线程不再存在了。
只要应用程序运行,这将每秒更新一次文本:
private static void FadeOverlayText()
{
var uiThread = <<Your UI Thread>>;
while(uiThread.IsAlive)
{
OverlayForm.ClearLabelText();
Thread.Sleep(1000);
}
}
修改强>
这是一个我做过的简单例子,它有效。除了StatusText
标签之外,我还添加了button1
,它也会更改文字。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace ThreadTest2
{
public partial class Form1 : Form
{
Thread mainThread = null;
public Form1()
{
InitializeComponent();
mainThread = Thread.CurrentThread;
Thread myThread = new Thread(FadeOverlayText);
myThread.Start();
}
private void FadeOverlayText()
{
while (mainThread.IsAlive)
{
ClearLabelText();
Thread.Sleep(1000);
}
}
public void ClearLabelText()
{
if (StatusText.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate
{
StatusText.Text = "Something should happen";
});
}
else
{
StatusText.Text = "Something should happen";
}
}
private void button1_Click(object sender, EventArgs e)
{
StatusText.Text = "It works!";
}
}
}
答案 1 :(得分:-1)
使这项工作的一种方法是使用
的计时器StatusText.Text= yourstring;
每隔n毫秒,让你的线程更新你的字符串&#39;变量到你想要的任何东西。