C# 以异步方式运行oncomplete事件

C# 以异步方式运行oncomplete事件,c#,multithreading,asynchronous,C#,Multithreading,Asynchronous,是否有办法让oncomplete事件异步运行。oncomplete事件是从外部dll调用的。外部dll使用异步,我正在为它创建一个隐藏多线程的包装器 我曾经尝试过使用AutoResetEvents,但是这些被挂在WaitOne上,因为oncomplete事件只会在函数完成后运行,重置AutoResetEvent 从外部Dll中可以看出,对象树需要同步到主窗体才能正常工作。这会将所有内容强制放在一个线程上。GetTag称为GetTag(this) 简言之,有没有什么方法可以让代码等到找到启动者之后

是否有办法让oncomplete事件异步运行。oncomplete事件是从外部dll调用的。外部dll使用异步,我正在为它创建一个隐藏多线程的包装器

我曾经尝试过使用AutoResetEvents,但是这些被挂在WaitOne上,因为oncomplete事件只会在函数完成后运行,重置AutoResetEvent

从外部Dll中可以看出,对象树需要同步到主窗体才能正常工作。这会将所有内容强制放在一个线程上。GetTag称为GetTag(this)


简言之,有没有什么方法可以让代码等到找到启动者之后再运行?我无法访问启动代码

好吧,我找到了这个。 我一直在检查一个字段,该字段应该在initiate函数中设置为last on。 在服务器对象上,我正在使用isConnected字段

while ((lOPCServer.IsConnected == false) && (lTimeout < 60000)) //1 min timeout
{
    Thread.Sleep(10);
    lTimeout += 10;
}

if (lTimeout >= 60000)
{
    return ""; //Server initaite timed out
}
while((lOPCServer.IsConnected==false)和&(lTimeout<60000))//1分钟超时
{
睡眠(10);
lTimeout+=10;
}
如果(lTimeout>=60000)
{
返回“”;//服务器初始化超时
}

您是否尝试创建自己的事件/委托?委托(函数调用)嵌入到dll中。您是否建议创建某种包装委托?如果对LOPCServer.Initiate的调用未被阻止,您可以将剩余逻辑移动到OnInitiated2回调(我猜)。这就是调用Initiate调用回调函数的所有内容。lOPCServer.Initiate不会阻塞,这就是问题所在。我想要它。但是在回调中添加剩余逻辑的问题是如何获取返回值?如果两个单独的线程同时调用
GetTag
,该怎么办?您的服务器将启动两次。我想我不太明白您的意思。但如果我理解正确的话。从两个单独的线程调用GetTag两次并不重要。它使用的变量都是本地的,服务器可以处理许多并发连接(GetTag已经创建了一个到服务器的临时第二个连接),好吧,只是澄清一下
while ((lOPCServer.IsConnected == false) && (lTimeout < 60000)) //1 min timeout
{
    Thread.Sleep(10);
    lTimeout += 10;
}

if (lTimeout >= 60000)
{
    return ""; //Server initaite timed out
}