小编stu*_*zor的帖子

如何从异步任务返回结果?

我想从异步任务返回一个字符串结果.

System.Threading.Tasks.Task.Run(async () => await audatex.UploadInvoice(assessment, fileName));

public async Task UploadInvoice(string assessment, string fileName)
{
    //Do stuff
    return string;
}
Run Code Online (Sandbox Code Playgroud)

异步编程困惑我,有人可以解释一下吗?

c# async-await

13
推荐指数
3
解决办法
4万
查看次数

在VSTO中获取Excel工作簿的Hashcode以启用基于状态的按钮

我正在为excel创建一个VSTO功能区AddIn,我在我的应用程序中存储了一些工作簿状态信息,用于更新可视按钮已启用.考虑到可以存在多个工作簿,我将此状态对象存储在ThisAddIn类的字典中.我的问题是我不知道如何获得工作簿的唯一Hash/Key/Guid,因为我得到的是一个不断更改哈希值的COM包装器.很公平,我完全理解.

我已经使用了很长时间的一个解决方案是创建一个guid并将其存储在工作簿的CustomDocumentProperties中,并将基于该状态的状态映射为关键字.这至少有效,但如果我创建工作簿的副本并在同一个Application实例中打开它并且现在有多个工作簿具有相同的guid,它就会失败.

我现在有一个想法,我想我可以在Workbook_Open事件上刷新这个Guid.但这仍然是一个狡猾的解决方案.

我在这里找到的第二个解决方案:http: //social.msdn.microsoft.com/Forums/en-US/vsto/thread/04efa74d-83bd-434d-ab07-36742fd8410e/

所以我使用那些人代码并创建了这个:

public static class WorkbookExtensions
{
    public static IntPtr GetHashery(this msExcel.Workbook workbook)
    {
        IntPtr punk = IntPtr.Zero;
        try
        {
            punk = Marshal.GetIUnknownForObject(workbook);
            return punk;
        }
        finally
        {
            //Release to decrease ref count
            Marshal.Release(punk);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它运行得非常好几分钟,直到它开始给我一个臭名昭着的错误"COM对象已经与其底层RCW分离不能使用"访问Application.ActiveWorkbook.

这是一种引用Workbook COM对象的安全方法吗?如果我有两个功能区应用程序都使用此方法获取单个工作簿GUID怎么办?如果其中一个应用程序在我的状态对象上运行垃圾收集器,调用终结器来调用Marshal.FinalReleaseComObject(工作簿),该怎么办?有什么方法可以获得工作簿的Ref Count,这样我就不会在其他Ribbon Apps完成之前调用FinalRelease吗?在VSTO中清理Workbook COM对象以保持与其他应用程序公平竞争的最佳做法是什么?

当然,我不是第一个想要根据Workbook状态启用按钮的人,其他人如何做到这一点?我在Stack Overflow上看过其他几篇文章,但没有一篇能帮助我解决Workbook Guid解决方案.

我正在使用功能区设计器,并连接到工作簿加载和停用事件.

在此先感谢,希望我已经包括所有的细节.

.net c# com excel vsto

6
推荐指数
1
解决办法
706
查看次数

Traefik + Docker for Windows:无法为 docker 创建客户端,错误:协议不可用和提供者连接错误协议不可用

我在使用基本的 Traefik 路由设置时遇到了麻烦。

我的目标是在端口 80 上使用两个 helloworld 应用程序(每个应用程序都不同以区分)获得基本路由,例如:

  • demo1.localhost -> helloworld1
  • demo2.localhost -> helloworld2

如果我单独运行它们,每个图像都可以正常工作docker run

在我的项目目录中使用 Powershell /app,当我运行时,docker-compose up我得到以下信息:

Traefik 服务启动,我可以很好地访问仪表板,但路由表没有显示我的路线。demo1 和 demo2 启动得很好,但显然我无法连接到它们,因为路由不起作用。

即使所有服务都成功启动 -我反复收到以下错误

traefik | ... "Failed to create a client for docker, error: protocol not available" providerName=docker
traefik | ... "Provider connection error protocol not available, retrying ..." providerName=docker
Run Code Online (Sandbox Code Playgroud)

我在下面包含了我的 docker-compose.yml 文件,这是我目录中唯一的文件/app.

docker-compose.yml:

# app/docker-compose.yml

version: '3.8'
networks:
  myweb:
    driver: nat

services:
  proxy:
    image: …
Run Code Online (Sandbox Code Playgroud)

docker traefik

5
推荐指数
1
解决办法
585
查看次数

标签 统计

c# ×2

.net ×1

async-await ×1

com ×1

docker ×1

excel ×1

traefik ×1

vsto ×1