Label从另一个线程更新a的最简单方法是什么?
我有一Form对thread1,并从我开始另一个线程(thread2).虽然thread2在处理一些文件,我想更新Label在Form用的当前状态thread2的工作.
我怎样才能做到这一点?
我有一个场景.(Windows Forms,C#,.NET)
UserControl_Load方法,则UI在加载方法执行的持续时间内变得无响应.伪代码看起来像这样:
代码1
UserContrl1_LoadDataMethod()
{
if (textbox1.text == "MyName") // This gives exception
{
//Load data corresponding to "MyName".
//Populate a globale variable List<string> which will be binded to grid at some later stage.
}
}
Run Code Online (Sandbox Code Playgroud)
它给出的例外是
跨线程操作无效:从创建它的线程以外的线程访问控件.
为了更多地了解这一点,我做了一些谷歌搜索,并提出了一个建议,如使用下面的代码
代码2
UserContrl1_LoadDataMethod()
{
if (InvokeRequired) // Line #1
{
this.Invoke(new MethodInvoker(UserContrl1_LoadDataMethod));
return;
}
if (textbox1.text == "MyName") // Now it wont give an exception
{
//Load data correspondin to "MyName"
//Populate a globale …Run Code Online (Sandbox Code Playgroud) 我正在学习C#中的线程,所以我的第一个程序将是2个将要移动的图像.但问题是,当我尝试在线程中执行新点时,我收到错误:
这是我的代码:
namespace TADP___11___EjercicioHilosDatos
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int x = 0;
int y = 0;
private void Form1_Load(object sender, EventArgs e)
{
Thread Proceso1 = new Thread(new ThreadStart(Hilo1));
Proceso1.Start();
}
public void Hilo1()
{
while (true)
{
x = pictureBox1.Location.X - 1;
y = pictureBox1.Location.Y;
pictureBox1.Location = new Point(x, y);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图从辅助线程隐藏在主线程上创建的表单,但是当我调用 hide 方法时,我显然遇到了跨线程问题。我是新手,并没有真正知道如何纠正这个问题。如果它正在更改在主线程上创建的内容,我总是只创建一个委托来调用我的方法,但我不知道如何在此处为内置的 hide 方法执行此操作。如果您需要更多信息,请与我们联系。
代码:
public partial class MainForm : Form
{
ControlPanelForm m_controlPanel = new ControlPanelForm();
// ....
void MeterThread()
{
while (true)
{
// ....
if (EMOdetected)
{
m_controlPanel.Deinitialize();
m_controlPanel.Hide(); // **** //
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我的 MainForm 拉出一个控制面板表单,它可以做一些工作。在后台,我有一个线程正在运行并检查内容,其中之一是紧急关闭,此时我想关闭我的控制面板,然后将其隐藏。
如果我尝试在那里调用它,
m_controlPanel.Invoke(new EMOHandler(m_controlPanel.Hide)); // **** //
Run Code Online (Sandbox Code Playgroud)
当我调试它时,它看起来并不执行任何操作。它似乎只是传递命令。再次,我是新手,所以欢迎任何和所有解释。