早上好,我试图在C#中编写一些应用程序,我喜欢从另一个线程和类更新UI(这里是进度条)。C#从不同的类/线程更新UI
但我只是无法让它工作,我搜索了一下,但我恐怕我只是不明白。我有一个Windows窗体应用程序,当我点击一个按钮时,我开始一个线程,并且在这个线程中的某个地方我想更新我的UI。
我要么得到: 一个对象引用是所必需的非静态字段,方法或属性 或东西在物体的方向通过不同的线程被创建。 (在我尝试致电Form1.UpdateProgressBar(value); in fileReader的位置)。我没有经验的面向对象编程,我通常坚持C.如果有人能告诉我正确的方式来做到这一点,我会很高兴。
Edit_1:好吧..错误组合,如果我没有静态问题,那么到目前为止的答案可能会有所帮助。并且通过使整个类的静态固定的静态问题,对自己产生错误的另一个X量,包括:
静态类不能有实例构造
namespace TestCode
{
public partial class Form1 : Form
{
static fileReader SourceReader;
public Thread SearchThread { get; set; }
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
folderBrowserDialog1.ShowDialog();
Console.WriteLine(folderBrowserDialog1.SelectedPath);
this.SearchThread = new Thread(new ThreadStart(this.ThreadProcSafe));
this.SearchThread.Start();
}
public void UpdateProgressBar(int value)
{
progressBar1.Value =value;
}
private void ThreadProcSafe()
{
SourceReader = new fileReader(folderBrowserDialog1.SelectedPath);
}
}
}
2类:
namespace TestCode
{
class fileReader
{
public fileReader(String path)
{
int value = 20;
/*Do some stuff*/
Form1.UpdateProgressBar(value);
}
}
}
您的fileReader类不是st atic这就是为什么编译器说你在调用它的构造函数之前需要对该类的引用。 –
这是一个糟糕的设计。 'fileReader'不应该依赖于'Forms'。查看“Task”和“IProgress”的用法以获得更好的进度通知。示例:https://blogs.msdn.microsoft.com/dotnet/2012/06/06/async-in-4-5-enabling-progress-and-cancellation-in-async-apis/ –
user3185569