每隔X分钟运行一次线程并更新表单组件c#

时间:2012-09-17 18:41:25

标签: c# multithreading forms class

这是我的问题...我有一个带有ListBox和RichTextBox的Windows窗体,以及一个带有一些函数的单独的类文件......

我知道如何更新简单的文本框,但不知道列表视图,因为如果我使用相同的代码,我会为myFunc的每一步获得1个新项目,重点是:

//myFunc loads
var lv = listProcess.Items.Add("This is my item");
//myFunc step1
lv.SubItems.Add("Column2 step1 status");
lv.SubItems.Add("Column3 step1 status");
lv.SubItems.Add("Column4 step1 status");
//myFunc step2
lv.SubItems.Add("Column2 step2 status");
lv.SubItems.Add("Column3 step2 status");
lv.SubItems.Add("Column4 step2 status");
//myFunc ends
//Remove item "lv" from listview.

我希望有人可以帮助我...

  

Form1.cs的

public Form1()
    {
        InitializeComponent();
        var func = new System.Threading.Timer(otherclass.myFunc, null, 0, 60000);
    }
  

otherclass.cs

public class otherclass
{
    public static void myFunc(object sender)
    {
        var lv = listProcess.Items.Add("This is my item");
        for(int i; i <= x; i++)
        // Update lv subitems here
        next
        // Update richTextBox1 here when all steps are done

    }
}

我希望有人可以帮助我,因为我迷失了

1 个答案:

答案 0 :(得分:0)

public class otherclass   // otherclass means: should not know about ListViews or RTBs
{
    public static void myFunc(object sender)
    {
        var lv = listProcess.Items.Add("This is my item");
        for(int i; i <= x; i++)
        // Update lv subitems here
        next
        // Update richTextBox1 here when all steps are done

    }
}

针对您的一般问题:

  1. 使用WinForms计时器(不是Threading.Timer)
  2. 当它勾选时,启动一个Backgroundworker
  3. Bgw在DOWork中执行该功能,更新已完成的ListView。
  4. 所需要的是从List<string>返回的数据格式(MyFunc()或更多涉及的内容)。