小编use*_*829的帖子

删除动态创建的控件

我一直困在我的程序的这一部分.当我调用一个listbox.selectitemchange事件时,我希望显示适当数量的轨迹栏和标签.

现在,它无法正常工作.其中一些在调用事件时被删除,其中一些没有.

foreach (Label label in Controls.OfType<Label>())
{
    if (label.Tag != null && label.Tag.ToString() == "dispose")
    {
        label.Dispose();
    }
}

foreach (TrackBar trackBar in Controls.OfType<TrackBar>())
{
    if (trackBar.Tag != null && trackBar.Tag.ToString() == "dispose")
    {
        trackBar.Dispose();
    }
}


    for (int i = 0; i < calc; i++)
    {
        //string[] LineWidthSplitted = lines[lineWidth].Split(' ');
        //Int32.TryParse(LineWidthSplitted[2], out WidthValue);


        Label Label = new Label();
        Label.Name = "TrackbarWidth" + LabelName++;
        Label.Tag = "dispose";
        Label.Text = "Board -" + LabelName + "- Height:"; …
Run Code Online (Sandbox Code Playgroud)

.net c# winforms

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

C# 在单独的线程上调用按钮控件

我看到了很多关于如何从不同线程编辑 c# 表单上的控件的问题,但对我来说没有多大意义。我知道您不能从主线程以外的其他线程更改任何 UI。为了使这项工作有效,您必须使用调用并从那里安全地编辑控件?

我有一个按钮开始写入文件,当您按下按钮时,按钮本身就会被禁用,因此您无法启动执行完全相同操作的多个线程。写入完成后,我希望按钮再次可用,但我无法让它在另一个线程上工作。

我将其作为表单中的Generate_Click 事件。

private void Generate_Click(object sender, EventArgs e)
{
    Generate.Enabled = false;

    int x = 512;
    int y = 512;

    MBrot mbrot = new MBrot(x, y);

    PB_Update lb = new PB_Update(0, y, Generator_PB, Generate, mbrot, this);
    lb.Start();
}
Run Code Online (Sandbox Code Playgroud)

这是 PB_Update.cs 中的 ThreadWork() 函数,当 while 循环完成时,对文件的写入完成,线程也完成,因此它结束并给出一个带有“finished”的消息框,现在作为最后一个按钮需要再次启用。

public void ThreadWork()
{
    while (true)
    {
        if (currValue_ >= maxValue_)
            break;

        ThreadTick();
    }

    mb_.StopBrot();
    t_.Interrupt();

    MessageBox.Show("Finished!");
    Generate_.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud)

c# controls multithreading invoke winforms

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

标签 统计

c# ×2

winforms ×2

.net ×1

controls ×1

invoke ×1

multithreading ×1