如何与两个DLL共享取消令牌?

时间:2013-12-04 16:38:47

标签: c# ilmerge cancellation cancellationtokensource cancellation-token

我在 FIRST dll

中有以下代码
public Task FuncAsync(string a, string b, CancellationToken ct)
{

    Task t = new Task
        (
            () =>
            {
                Save(a, b, ct);
            }, ct
        );

    t.Start();
    return t;
}

private void Save(string a, string b, CancellationToken ct)
{
    classA.func(a, b, ct); // DOESNT WORK !
    //classA.func(a, c);     // WORKS !
}

方法类classA位于 SECOND dll 中:

public void func(string a, string b, CancellationToken ct)
{
// some code...
}
public delegate void ProgressHandler(object sender, ProgressArgs progressArgs);
public event ProgressHandler ProgressChanged;

然后,在控制台应用程序中调用我的方法FuncAsync:

CancellationTokenSource cancelSource = new CancellationTokenSource();
CancellationToken ct = cancelSource.Token;
Task task = B.SaveAsync("", "", ct);

第一个DLL包括第二个,控制台应用程序包含第一个DLL。

此代码编译良好,没有警告,没有错误。但在执行时,行上的错误:保存(a,b,ct);

Additional information: Could not load type 'ProgressHandler' from assembly 'A.B.C, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'func' has no implementation (no RVA).

如果我从代码中删除了CancellationToken,一切正常。

如何将CancellationToken从应用程序发送到DLL1,然后从DLL1发送到DLL2?

编辑:

我忘了确切地说我只使用命令将两个DLL合并为一个:

ILMerge /target:libray dll1Temp.dll  dll2.dll  /out:dll1.dll  /internalize /allowDup /lib:C:\Windows\Microsoft.NET\Framework64\v4.0.30319
del dll1Temp.dll
del dll2.dll

当我不合并库时,我的代码中没有错误。

0 个答案:

没有答案