Vb.net 需要将Windows控制台应用程序类转换为ISynchronizeInvoke对象
我不熟悉VB.Net中的线程和同步概念 目前,我正在将Windows窗体应用程序转换为控制台应用程序。 表单应用程序使用用于异步进程的DLL:Vb.net 需要将Windows控制台应用程序类转换为ISynchronizeInvoke对象,vb.net,multithreading,console-application,Vb.net,Multithreading,Console Application,我不熟悉VB.Net中的线程和同步概念 目前,我正在将Windows窗体应用程序转换为控制台应用程序。 表单应用程序使用用于异步进程的DLL: public ProcessCaller(ISynchronizeInvoke isi) : base(isi) { } 但现在,当我将这个表单应用程序转换为控制台应用程序时,我无法将控制台应用程序类传递给这个DLL 我收到错误“无法从“X”转换为“Y” 请帮帮我 提前感谢ISynchronizeInvoke用
public ProcessCaller(ISynchronizeInvoke isi)
: base(isi)
{
}
但现在,当我将这个表单应用程序转换为控制台应用程序时,我无法将控制台应用程序类传递给这个DLL
我收到错误“无法从“X”转换为“Y”
请帮帮我
提前感谢
ISynchronizeInvoke
用于返回到“正确”线程,通常用于所有UI操作都需要在同一线程上的客户端应用程序。这通常是通过消息泵/事件循环来完成的,而消息泵/事件循环通常不存在于控制台应用程序中
控制台应用程序中的线程要求是什么?如果没有,您可能可以编写自己的ISynchronizeInvoke
的no-op实现,它总是从invokererequired
等返回false
。这里是实现的第一次尝试-未经测试,请注意
public class NoOpSynchronizeInvoke : ISynchronizeInvoke
{
private delegate object GeneralDelegate(Delegate method,
object[] args);
public bool InvokeRequired { get { return false; } }
public Object Invoke(Delegate method, object[] args)
{
return method.DynamicInvoke(args);
}
public IAsyncResult BeginInvoke(Delegate method,
object[] args)
{
GeneralDelegate x = Invoke;
return x.BeginInvoke(method, args, null, x);
}
public object EndInvoke(IAsyncResult result)
{
GeneralDelegate x = (GeneralDelegate) result.AsyncState;
return x.EndInvoke(result);
}
}
ISynchronizeInvoke
用于返回到“正确”线程,通常在所有UI操作都需要在同一线程上的客户端应用程序中。这通常是通过消息泵/事件循环来完成的,而消息泵/事件循环通常不存在于控制台应用程序中
控制台应用程序中的线程要求是什么?如果没有,您可能可以编写自己的ISynchronizeInvoke
的no-op实现,它总是从invokererequired
等返回false
。这里是实现的第一次尝试-未经测试,请注意
public class NoOpSynchronizeInvoke : ISynchronizeInvoke
{
private delegate object GeneralDelegate(Delegate method,
object[] args);
public bool InvokeRequired { get { return false; } }
public Object Invoke(Delegate method, object[] args)
{
return method.DynamicInvoke(args);
}
public IAsyncResult BeginInvoke(Delegate method,
object[] args)
{
GeneralDelegate x = Invoke;
return x.BeginInvoke(method, args, null, x);
}
public object EndInvoke(IAsyncResult result)
{
GeneralDelegate x = (GeneralDelegate) result.AsyncState;
return x.EndInvoke(result);
}
}
你说你在VB.NET中工作,但是代码段是C#…?你在哪一行上得到错误?是的,我在用VB.NET代码调用用C#编写的DLL。我在VB代码中调用此方法:x=New AsyncProcess.ProcessCaller(Me),这会给我运行时错误。你说你在VB.NET中工作,但代码段是C#…?你在哪一行上得到错误?是的,我正在处理VB.NET代码,它调用用C#编写的DLL。我在VB代码中调用这个方法:x=New AsyncProcess.ProcessCaller(Me),它给了我运行时错误。John,感谢您的快速响应。我有一个项目,它是使用Win form应用程序的线程概念编写的。现在,我试图分离它的UI部分,将其转换为控制台应用程序。可以请在VB.Net中编写上述代码。Thanks@user2060435字体恐怕不行。我没有时间。你可以自己做——到处都是VB/C转换器——或者你可以把它构建成一个C#DLL,你可以从你的C#项目中引用它。约翰,谢谢你的快速回复。我有一个项目,它是使用Win form应用程序的线程概念编写的。现在,我试图分离它的UI部分,将其转换为控制台应用程序。可以请在VB.Net中编写上述代码。Thanks@user2060435字体恐怕不行。我没有时间。你可以自己做——到处都是VB/C转换器——或者你可以把它构建成一个C#DLL,从你的C#项目中引用它。