相关疑难解决方法(0)

如何从其他线程更新GUI?

Label从另一个线程更新a的最简单方法是什么?

我有一Formthread1,并从我开始另一个线程(thread2).虽然thread2在处理一些文件,我想更新LabelForm用的当前状态thread2的工作.

我怎样才能做到这一点?

.net c# user-interface multithreading winforms

1331
推荐指数
41
解决办法
63万
查看次数

同时运行方法

我有一个带有方法Run的Dog类,它应该在屏幕上移动图片:

public bool Run()
{
    Point p = PictureBoxDog.Location;

    while(p.X < 530)
    {
        int movement = Randomizer.Next(0, 3);
        p.X += movement;
        PictureBoxDog.Location = p;
    }

    if (Location == 4) //Incomplete section.
        return true;
    else
        return false;
}
Run Code Online (Sandbox Code Playgroud)

从按钮单击事件调用此方法,其中创建了4个dog对象,并且每个对象都调用Run方法:

private void button1_Click(object sender, EventArgs e)
{
    Dog dog1 = new Dog(pictureDog1);
    Dog dog2 = new Dog(pictureDog2);
    Dog dog3 = new Dog(pictureDog3);
    Dog dog4 = new Dog(pictureDog4);

    dog1.Run();
    dog2.Run();
    dog3.Run();
    dog4.Run();
}
Run Code Online (Sandbox Code Playgroud)

问题是每个方法一个接一个地执行,而不是同时执行.我希望每个方法同时运行.如果我删除了while语句,那么所有方法都会同时执行,但是使用while循环,它们会一个接一个地执行.任何关于如何解决这个问题的建议都非常感谢.没有while循环的run方法:

public bool Run() //Dog1.Run()
{
    Point p = PictureBoxDog.Location; …
Run Code Online (Sandbox Code Playgroud)

c# multithreading

13
推荐指数
2
解决办法
1100
查看次数

C#GUI应用程序,来自另一个更新UI的线程的另一个类

我一直在研究如何做这个约一个星期,我仍然不确定正确的方法,在一些例子中我看到Thread类用于其他我看到Invoke使用,这让我感到困惑.

我在c#中有一个GUI程序,它包含一个textBox,用于向用户提供信息.

我面临的问题是我不知道如何从另一个在另一个线程上运行的类向textBox追加文本.如果有人能告诉我一个有效的例子,那对我有很大的帮助.

最好的祝福!

c# user-interface multithreading class

4
推荐指数
1
解决办法
4628
查看次数

在 WinForms 上使用 TPL 进行并行编程

我尝试在 WinForms .NET 4.0 上使用 TPL,我按照适用于 WPF 的步骤(转到文章末尾)进行了一些小更改,以便它可以在 WinForms 上工作,但仍然不起作用。它应该显示结果在标签和 richTextBox 上,但它不是...我认为并行过程工作导致鼠标在我单击按钮时开始缓慢移动一段时间..

public static double SumRootN(int root)
{   double result = 0;
    for (int i = 1; i < 10000000; i++)
    {   result += Math.Exp(Math.Log(i) / root);}
    return result;
}
private void button1_Click(object sender, EventArgs e)
{   richTextBox1.Text = "";
    label1.Text = "Milliseconds: ";
    var watch = Stopwatch.StartNew();
    List<Task> tasks = new List<Task>();
    for (int i = 2; i < 20; i++)
    {   int j = i;
        var …
Run Code Online (Sandbox Code Playgroud)

c# wpf winforms task-parallel-library

4
推荐指数
1
解决办法
7325
查看次数

主线程忙时连续更新UI

我想在我的MainForm正在进行一些与数据库相关的工作时显示带有Progressbar的新表单.我已经读过你不想将UI传递给新的线程,所以我想知道解决这个问题的最佳解决方案是什么?

我无法在另一个线程上执行与数据库相关的工作,因为它使用了对UI和MainForm的十几个调用.我也无法使用,Application.DoEvents()因为MainForm的线程在类中工作,据我所知,你不应该对类的父类进行任何调用.

任何建议,将不胜感激!

编辑

澄清我实际想知道的事情:

我的程序看起来有点像这样:

... Content = DatabaseClass.LoadContent();
ApplyContentToUI(Content);
Run Code Online (Sandbox Code Playgroud)

我想做的是以下内容:

//Show a form here with a progressbar
... Content = DatabaseClass.LoadContent();
ApplyContentToUI(Content);
//Close the form here
Run Code Online (Sandbox Code Playgroud)

但是,因为执行ApplyContentToUI的时间是aprox.1秒我决定做以下事情:

//Show a form here with a progressbar
... Content = DatabaseClass.LoadContent();
//Close the form here
ApplyContentToUI(Content);
Run Code Online (Sandbox Code Playgroud)

如果您和我不同,需要在重新加载UI时显示进度条,我建议您查看下面的注释和答案.

.net c# multithreading winforms

1
推荐指数
1
解决办法
3355
查看次数