C# 为什么Form1中的label2.Text没有从新类更新?
在Form1中,我在设计器中添加了label2,并添加了一个代码:C# 为什么Form1中的label2.Text没有从新类更新?,c#,C#,在Form1中,我在设计器中添加了label2,并添加了一个代码: public void lbl2(string text) { label2.Text = text; } 在新的top类中,我添加了: private static AnimationEditor.Form1 fr1 = new AnimationEditor.Form1(); 在新的类事件中,我将更新label2。文本如下: int ISampleGrabberCB
public void lbl2(string text)
{
label2.Text = text;
}
在新的top类中,我添加了:
private static AnimationEditor.Form1 fr1 = new AnimationEditor.Form1();
在新的类事件中,我将更新label2。文本如下:
int ISampleGrabberCB.BufferCB(double sampleTime, IntPtr pBuffer, int bufferLen)
{
using (var bitmap = new Bitmap(_width, _height, _width * 3, PixelFormat.Format24bppRgb, pBuffer))
{
bitmap.RotateFlip(RotateFlipType.Rotate180FlipX);
if (SaveToDisc)
{
String tempFile = _outFolder + _frameId + ".bmp";
if (File.Exists(tempFile))
{
fr1.lbl2(_frameId.ToString();
}
else
{
bitmap.Save(Path.Combine(_outFolder, _frameId + ".bmp"));
}
_frameId++;
}
else
{
if (Images == null)
Images = new List<Bitmap>();
Images.Add((Bitmap)bitmap.Clone());
}
}
return 0;
}
现在我在新类的这一行中使用了断点,在公共函数中的label2.Text的Form1中也使用了断点,我看到label2的文本先是0,然后是1,然后是2,依此类推
但事实上,当我运行应用程序时,label2会实时更改它的所有时间,文本状态为label2
这是我单击Form1按钮时的Form1按钮单击事件,它正在执行新的类代码:
private void button5_Click(object sender, EventArgs e)
{
wmv = new Polkan.DataSource.WmvAdapter(@"d:\VIDEO0040.3gp", sf);
wmv.SaveToDisc = true;
wmv.Start();
wmv.WaitUntilDone();
}
我认为快速的答案是将标签的引用传递给班级:
private Label lbl;
public WmvAdapter(string file, string outFolder, Label label) {
// yada-yada-yada
lbl = label;
}
您的日程将更改为:
if (File.Exists(tempFile))
{
lbl.Text = _frameId.ToString();
}
您的点击事件:
private void button5_Click(object sender, EventArgs e)
{
wmv = new Polkan.DataSource.WmvAdapter(@"d:\VIDEO0040.3gp", sf, this.Label2);
wmv.SaveToDisc = true;
wmv.Start();
wmv.WaitUntilDone();
}
较长的答案是让你的班级提出一个事件,并让你的表格倾听
让您的班级了解表单并不是最佳的编码实践。我认为快速的答案是将标签的引用传递给班级:
private Label lbl;
public WmvAdapter(string file, string outFolder, Label label) {
// yada-yada-yada
lbl = label;
}
您的日程将更改为:
if (File.Exists(tempFile))
{
lbl.Text = _frameId.ToString();
}
您的点击事件:
private void button5_Click(object sender, EventArgs e)
{
wmv = new Polkan.DataSource.WmvAdapter(@"d:\VIDEO0040.3gp", sf, this.Label2);
wmv.SaveToDisc = true;
wmv.Start();
wmv.WaitUntilDone();
}
较长的答案是让你的班级提出一个事件,并让你的表格倾听
让您的类知道表单不是最佳编码实践。UI被锁定是什么意思?不在Form1 im更新其他标签,如picturebox1鼠标移动事件i在标签1中更新鼠标移动及其工作的坐标。我还尝试在运行时代码中将label2文本更改为“hi”进行测试,结果成功了。所以这里有些东西在起作用,有些东西在起作用。
fr1
不需要实际引用您正在使用的表单吗?我看到fr1=newanimationeditor.Form1()代码>,可能与您使用的表单实例不同。LarsTech AnimationEditor是名称空间。我在label2行上使用了一个断点。Text=Text;在Form1中的lbl2函数中,看到文本已更改。变量文本正在更改0,1,2…请确保它正常工作。看起来您有两个表单:一个是您正在使用的表单,另一个是您的类创建的表单。不同的东西。LarsTech我现在还在label2上使用了一个断点。Form1 lbl2函数中的Text=Text,看到文本也在变化,label2也在变化。文本在0之后变化,然后是1,然后是2…等等…mmmm你说UI被锁定是什么意思?不在Form1 im更新其他标签,如picturebox1鼠标移动事件i在标签1中更新鼠标移动及其工作的坐标。我还尝试在运行时代码中将label2文本更改为“hi”进行测试,结果成功了。所以这里有些东西在起作用,有些东西在起作用。fr1
不需要实际引用您正在使用的表单吗?我看到fr1=newanimationeditor.Form1()代码>,可能与您使用的表单实例不同。LarsTech AnimationEditor是名称空间。我在label2行上使用了一个断点。Text=Text;在Form1中的lbl2函数中,看到文本已更改。变量文本正在更改0,1,2…请确保它正常工作。看起来您有两个表单:一个是您正在使用的表单,另一个是您的类创建的表单。不同的东西。LarsTech我现在还在label2上使用了一个断点。在Form1 lbl2函数中Text=Text,并且看到文本也在变化,label2也在变化。文本一旦变为0,然后变为1,然后变为2…等等…mmmmLars,但是在新的类中,我不能使私有Form1 fr1;它没有给我选择权。像Form1 dosent一样存在。我编辑了我的Form1代码,并将其放在我的问题帖子中Form1代码的开头。@user1434011更新答案以只传递标签而不是表单。Lars我尝试了您上次编辑的代码,并在新类中的lbl.Text=\u frameId.ToString()行;我收到一个异常:跨线程操作无效:从创建控件“label2”的线程以外的线程访问控件“label2”。正在工作!我必须像这样在新类中调用lbl:if(lbl.invokererequired){lbl.invoke(newmethodinvoker(delegate{lbl.Text=_frameId.ToString();}));}Lars,但在新类中我不能将私有形式设为fr1;它没有给我选择权。像Form1 dosent一样存在。我编辑了我的Form1代码,并将其放在我的问题帖子中Form1代码的开头。@user1434011更新答案以只传递标签而不是表单。Lars我尝试了您上次编辑的代码,并在新类中的lbl.Text=\u frameId.ToString()行;我收到一个异常:跨线程操作无效:从创建控件“label2”的线程以外的线程访问控件“label2”。正在工作!我必须像这样在新类中调用lbl:if(lbl.invokererequired){lbl.invoke(newmethodinvoker(委托{lbl.Text=_frameId.ToString();}));}