从主程序访问线程中的表单

时间:2012-11-27 13:43:55

标签: c# multithreading com

我编写了一个C#DLL COM库,可以通过VBScript访问。所有的库内容都是在主程序中编写的,没有任何形式。

后来我添加了一个只显示状态的表单(例如" 49%已完成")。这非常有效,但是当DLL必须计算很多东西时,表格会挂掉"挂起"。我想让表格随时可访问和移动。

所以我决定为表单创建一个自己的线程。创建线程和表单很容易,但是从主程序访问此表单时遇到很大问题。我只想设置标题为例。

我打电话给这样的表格:


namespace PART1.PART2
{
    public class CLASSNAME
    {
        private Thread fStatus;
        private frm_Status fStatusForm;

        public void runShowStatus()
        {
            if (fStatus == null)
            {
                fStatus = new Thread(new ThreadStart(threadForm));
                fStatus.Start();
            }
        }

        private void threadForm()
        {
            fStatusForm = new frm_Status();
            Application.Run(fStatusForm);
        }
    }
}

表单本身是标准表单。到目前为止还没有特殊的代码。

有相似的帖子,但有两个主要区别:

  • 表单在一个帖子中 - 表单不在主程序中,表单不是主要表单。
  • 主程序尝试访问表单 - 表单不会尝试访问主程序。

1 个答案:

答案 0 :(得分:0)

您可以将volatile变量添加到主类CLASSNAME,如下所示:

private static volatile int progress = 0;

现在您可以从主线程更改其值,并从表单线程中读取值。