计时器创建另一个线程并触发异常

时间:2018-05-05 12:36:46

标签: c# .net timer

我正在使用TaskPane在C#中编写PowerPoint插件。

此刻我想在窗格上打印一些内容 - 等待5秒 - 并打印不同的内容。

我的等待过程有问题。

  • 如果我使用System.Threading.Thread.Sleep(5000),我会冻结所有PowerPoint界面,而不仅仅是我的窗格。 PowerPoint界面和我的任务窗格是同一个线程

  • 如果我使用System.Timers.Timer,那么我会创建第二个线程并触发错误,说我正在尝试访问另一个线程上的对象。

这是我的第二个案例的代码:

    private void waitThisTime(int givenTime)
    {
        timer = new System.Timers.Timer(givenTime);
        timer.Elapsed += OnTimedEvent;
        timer.AutoReset = false;
        timer.Enabled = true;
    }

    private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
    {
        DisplayMessage(currentState); // DisplayMessage modifies textbox and button displayed on the panel
    }

您是否知道如何仅冻结面板但不会触发异常?

修改

This question here处理多线程的访问问题。我的问题有点不同,因为它处理计时器,我只想冻结我的应用程序的一部分(只有面板而不是整个用户界面)

1 个答案:

答案 0 :(得分:1)

试试这个:

System.Threading.Timer()