2013-02-11 51 views
1

我是VB.Net中線程和同步概念的新手。需要將Windows控制檯應用程序類轉換爲ISynchronizeInvoke對象

目前我正在將Windows窗體應用程序轉換爲控制檯應用程序。 表單應用程序使用它用於異步過程DLL:

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

    } 

但現在當我轉換這種形式的應用程序控制臺應用程序,我不能控制檯應用程序類傳遞給該DLL。

我收到錯誤「無法從‘X’轉換爲‘Y’」

請幫助我。提前

+0

你說你在VB.NET中工作,但代碼片段是C#...? – Tim 2013-02-11 06:49:33

+0

你得到的錯誤是哪一行? – Tim 2013-02-11 06:51:36

+0

是的我正在調用在C#中編寫的DLL的VB.net代碼。 我在VB代碼中調用此方法: x =新的AsyncProcess.ProcessCaller(Me) 這是給我的運行時錯誤。 – user2060435 2013-02-11 08:10:56

回答

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); 
    } 
} 
+0

John,感謝您的快速回復。 我有使用線程概念爲Win表單應用程序編寫的項目。現在我正在嘗試將它的UI部分分開以將其轉換爲控制檯應用程序。 可以請VB.Net寫上面的代碼。 謝謝 – user2060435 2013-02-11 08:12:28

+0

@ user2060435:不,我恐怕沒有。我沒有時間。你可以自己做 - 有很多VB/C#轉換器 - 或者你可以把它建立到你從C#項目引用的C#DLL中。 – 2013-02-11 08:17:11

+0

好吧,我會那樣做的。謝謝 – user2060435 2013-02-11 08:19:20

相關問題