代码之家  ›  专栏  ›  技术社区  ›  Marks

工作时用progressbar显示窗口

  •  1
  • Marks  · 技术社区  · 15 年前


    因为我有一个工具,需要在一个点上做很多工作,我想显示一个窗口,其中有一些文本和进度条,而做的工作。

    我的问题是,由于工作量太大,窗口永远不会被绘制或更新。

    我知道我通常应该使用一个额外的线程来完成这项工作,但是我必须使用2个集合和来自当前线程的数据库服务。

    StatusWindow SW = new StatusWindow();
    StatusViewModel SVM = new StatusViewModel();
    
    SVM.MaxNum = BigNumber;
    
    SW.Show();
    
    for (int i=0; i<BigNumber; i++)
    {
        List<AType> ItemsToCreate = Func1();
        List<AType> ItemsToDelete = Func2();
    
        foreach (AType cItem in ItemsToCreate)
            DB.CreateItem(cItem);
    
        foreach (AType cItem in ItemsToDelete)
            DB:DeleteItem(cItem);
    
        SVM.CurrentNum = i;
    }
    SW.Close();
    

    我也读过关于Dispatcher的文章,但是我认为它在这个场景中不是很有用,因为对主线程的访问太多了。

    有什么建议吗?
    谢谢

    2 回复  |  直到 15 年前
        1
  •  1
  •   testalino    15 年前

    只要您正在访问的对象可以从不同的线程访问,您就可以传递这两个集合以及其他任何您想要的工作线程。

    int[] arrayofInt = new int[10]
    ThreadPool.QueueUserWorkItem(s =>
            {
                //access the array in the worker thread
                arrayofInt[0] = 10;
            });
    

        2
  •  2
  •   Zamboni    15 年前