Q
顯示另一個表格
0
A
回答
0
我已經使用遠程實現它,但是當我有更多的空閒時間時,我會考慮採用其他方式來做這件事。以下是我做的: 在窗體類有:
public Main()
{
InitializeComponent();
this.ShowFromFormShower = new FormShower.ShowFromFormShowerDelegate(this.ShowFromFormShower1);
FormShower.Register(this);
}
private void ShowFromFormShower1()
{
this.Show();
this.WindowState = FormWindowState.Normal;
this.BringToFront();
}
public PKW.FormShower.ShowFromFormShowerDelegate ShowFromFormShower;
另外一個遠程類需要創建:
public class FormShower : MarshalByRefObject
{
/// <summary>
/// For remote calls.
/// </summary>
public void Show()
{
if (FormShower.m == null)
throw new ApplicationException("Could not use remoting to show Main form because the reference is not set in the FormShower class.");
else
FormShower.m.Invoke(FormShower.m.ShowFromFormShower);
}
private const int PortNumber = 12312;
private static Main m = null;
public delegate void ShowFromFormShowerDelegate();
internal static void Register(Main m)
{
if (m == null) throw new ArgumentNullException("m");
FormShower.m = m;
ChannelServices.RegisterChannel(new TcpChannel(FormShower.PortNumber), false);
RemotingConfiguration.RegisterActivatedServiceType(typeof(FormShower));
}
internal static void CallShow()
{
TcpClientChannel c = new TcpClientChannel();
ChannelServices.RegisterChannel(c, false);
RemotingConfiguration.RegisterActivatedClientType(typeof(FormShower), "tcp://localhost:"+PortNumber.ToString());
FormShower fs = new FormShower();
fs.Show();
}
}
因此,如果用戶試圖啓動應用程序第二次應用程序啓動FormShower.CallShow方法。
0
這是一個很不方便的做事情。我建議使用命名管道(System.IO.Pipes
)來指示您的應用程序的第一個副本。第一個副本在接收到信號後將激活窗口本身。並且不用擔心任何權限。
0
另一種簡單的方法是使用Windows事件,在.NET中表示爲System.Threading.EventWaitHandle
類。
在應用程序中創建一個線程,它所做的只是等待一個命名事件。當事件發出信號時,該線程將使用Form.BeginInvoke
使主窗口出現,並返回等待事件。
從應用程序的新實例中,您只需發信號通知事件。
這需要比使用管道少一點的工作。
請注意,無論哪種方式(使用管道,窗口或事件),您都必須處理權限。例如,如果啓用了UAC,並且現有的應用程序實例以管理員身份運行,則新實例可能無法向其發送消息以顯示窗口,除非您確保設置適當的權限(例如,在管道或事件上,無論你的方法是什麼)。
相關問題
- 1. 在另一個表格前面做一個表單顯示
- 2. 在另一個表格中顯示錶格
- 3. 從另一種形式顯示錶格
- 4. 顯示一個表格中的表格
- 5. SQL表格:如何顯示從另一個SQL表格構建的表格?
- 6. 顯示一個表格的結果作爲鏈接以顯示結果到另一個表格?
- 7. 在總是在頂部的另一個表單前面顯示一個表格
- 8. 顯示已提交的javascriptMVC表格數據在另一個Div
- 9. 在另一個班級中顯示我的表格
- 10. 從另一個目錄啓動時Hive不顯示錶格
- 11. 從另一個線程的主線程中顯示錶格
- 12. 在另一個html中顯示錶格的行數據
- 13. 表不顯示在另一個架構
- 14. 在表格中的另一個頁面上顯示錶格數據HTML
- 15. 一個接一個地顯示div,另一個顯示div
- 16. 將列從一個Sharepoint列表顯示到另一個列表
- 17. 在Resful api的另一個列表中顯示一個列表。
- 18. 如何顯示另一個表中的一個表的列
- 19. 查詢3個表格,在一個表格中顯示結果
- 20. 在prestashop中顯示一個表格
- 21. 逐個顯示一系列表格JS
- 22. 顯示在另一個
- 23. 顯示另一個ViewController
- 24. 單元格只顯示另一個單元格的內容
- 25. Tableview跨越另一個tableview和自定義表格單元格不能顯示
- 26. 根據另一個單元格的值突出顯示錶格行
- 27. HTML表格覆蓋另一個表格
- 28. 顯示一個畫布到另一個
- 29. 在另一個顯示一個div
- 30. 顯示一個div隱藏另一個
所以你真的希望_your_應用程序是單個實例嗎?如果是這樣,你應該在StackOverflow上找到許多類似問題的好例子...... – Reddog 2011-01-11 22:19:58