我是 VB.Net 中的线程和同步概念的新手。
目前我正在将 Windows 窗体应用程序转换为控制台应用程序。表单应用程序使用一个用于异步进程的 DLL:
public ProcessCaller(ISynchronizeInvoke isi)
: base(isi)
{
}
但是现在当我将此表单应用程序转换为控制台应用程序时,我无法将控制台应用程序类传递给此 DLL。
我收到错误“无法从'X'转换为'Y'”
请帮我。
提前致谢
我是 VB.Net 中的线程和同步概念的新手。
目前我正在将 Windows 窗体应用程序转换为控制台应用程序。表单应用程序使用一个用于异步进程的 DLL:
public ProcessCaller(ISynchronizeInvoke isi)
: base(isi)
{
}
但是现在当我将此表单应用程序转换为控制台应用程序时,我无法将控制台应用程序类传递给此 DLL。
我收到错误“无法从'X'转换为'Y'”
请帮我。
提前致谢
ISynchronizeInvoke
用于返回“正确”线程,通常在所有 UI 操作都需要在同一个线程上的客户端应用程序中。这通常是通过消息泵/事件循环来完成的——这通常在控制台应用程序中不存在?
您在控制台应用程序中的线程要求是什么?如果您没有,您可能可以编写自己的无操作实现,ISynchronizeInvoke
该实现总是false
从InvokeRequired
等返回。这是实现的第一次尝试 - 未经测试,请注意...
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);
}
}