1

我是 VB.Net 中的线程和同步概念的新手。

目前我正在将 Windows 窗体应用程序转换为控制台应用程序。表单应用程序使用一个用于异步进程的 DLL:

    public ProcessCaller(ISynchronizeInvoke isi)
        : base(isi)
    {

    }

但是现在当我将此表单应用程序转换为控制台应用程序时,我无法将控制台应用程序类传递给此 DLL。

我收到错误“无法从'X'转换为'Y'”

请帮我。

提前致谢

4

1 回答 1

1

ISynchronizeInvoke用于返回“正确”线程,通常在所有 UI 操作都需要在同一个线程上的客户端应用程序中。这通常是通过消息泵/事件循环来完成的——这通常在控制台应用程序中不存在?

您在控制台应用程序中的线程要求是什么?如果您没有,您可能可以编写自己的无操作实现,ISynchronizeInvoke该实现总是falseInvokeRequired等返回。这是实现的第一次尝试 - 未经测试,请注意...

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);
    }
}
于 2013-02-11T06:52:13.083 回答