添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

带有VSTO加载项的c# Winform控件保持Excel响应

内容来源于 Stack Overflow,遵循 CC BY-SA 4.0 许可协议进行翻译与使用。IT领域专用引擎提供翻译支持

腾讯云小微IT领域专用引擎提供翻译支持

原文
Stack Overflow用户 修改于2018-08-07
  • 该问题已被编辑
  • 提问者: Stack Overflow用户
  • 提问时间: 2018-08-07 02:38

我是VSTO Excel外接程序和Winforms的新手。我已经创建了一个插件,它启动了一个winform页面,其中包含几个复选框、一个按钮和一个跟踪状态的标签。

winform一启动,我的excel就没有响应。我想使excel响应,即使与winform打开(并与按钮“完成”点击)。按钮将运行一个长时间运行的进程。我怎样才能做到这一点呢?有什么建议吗?

这是我的Ribbon类:

public partial class Ribbon1
        private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
        private void button1_Click(object sender, RibbonControlEventArgs e)
            Form1 fs = new Form1();
            fs.ShowDialog();
    }

Form类:

public partial class Form1 : Form
        public Form1()
            InitializeComponent();
        private async void button1_Click(object sender, EventArgs e)
            label1.Text = "Processing please wait";
            await Task.Run(() => { longRunningProcess(); });
            label1.Text = "File 1 Processed";
         public void longRunningProcess()
            Thread.Sleep(5000);
    }

更新:使用.show可以工作,但我无法访问label1.Text并得到错误信息:

System.InvalidOperationException: 'Cross-thread operation not valid: Control 'label1' accessed from a thread other than the thread it was created on.'

浏览 67 关注 0 得票数 1
  • 得票数为Stack Overflow原文数据
原文
回答于2018-08-07
得票数 1

使用 Show 打开表单,并使用 Invoke 将其编组回UI线程。

回答于2018-08-07
得票数 1

@Sievajet帮助解决了这个问题。发布代码,以防有人需要它。

private async void button1_Click(object sender, EventArgs e)