2011-09-21 42 views
5

Tôi đang tìm cách hiển thị cửa sổ (WPF) được định nghĩa trong dự án thư viện lớp riêng biệt dưới dạng quy trình riêng biệt mới. Có cách nào để làm điều này không?cách bắt đầu dụ mới của dự án thứ hai trong quy trình mới

tôi cần để bắt đầu dụ dự án thứ hai trong quy trình mới, bởi vì có ở lại bộ nhớ bị chiếm đóng khi tôi bắt đầu nó bằng cách này:

secondProject.WPFWindow win = new secondProject.WPFWindow(); 
win.Show(); 

Tôi có ONE giải pháp với nhiều dự án.

  • Dự án khởi động là ứng dụng WPF., Loại đầu ra: Ứng dụng Windows (tệp exe).
  • Tất cả các dự án khác là ứng dụng WFP., Loại đầu ra: Thư viện lớp (tệp dll).

Bây giờ tôi đang chạy "ứng dụng" (dự án khác trong một giải pháp này được xây dựng như dll) bởi mã này:

secondProject.WPFWindow win = new secondProject.WPFWindow(); 
win.Show(); 

Tôi muốn được runnig rằng các ứng dụng trong quy trình mới ... Bình thường, tôi sẽ sử dụng Process.Start(), nhưng tôi không thể là trường hợp này bởi vì nó cần exe tập tin như agrument và tôi có (và muốn) DLLs.

+1

bạn có thể giải thích dự án thứ 2 là gì không? –

+1

Hãy thêm chi tiết ngay cả khi tiếng Anh không tuyệt vời, chúng tôi sẽ làm hết sức mình cho bạn – Coops

+0

Bạn đang cố bắt đầu ứng dụng thứ hai bên trong ứng dụng khác, đúng không? – Keeano

Trả lời

3

Bạn có thể chuyển đối số dòng lệnh tới .exe chính để cho biết ứng dụng nào cần chạy. Sau đó, exe chính chỉ có thể tự khởi chạy trong một quy trình mới và cho biết cá thể mới mà ứng dụng phụ chạy. Ví dụ trong ứng dụng .exe chính, đặt logic như thế này trong lớp ứng dụng của bạn:

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     //See if exactly one command line argument was passed 
     if (e.Args.Length == 1) 
     { 
      //See if the argument is one of our 'known' values 
      switch (e.Args[0]) 
      { 
       case "launchApp2": 
        secondProject.WPFWindow win2 = new secondProject.WPFWindow(); 
        win2.Show(); 
        break; 
       case "launchApp3": 
        thirdProject.OtherWPFWindow win3 = new thirdProject.OtherWPFWindow(); 
        win3.Show(); 
        break; 
      } 
     } 

     //Probably want to call the base class always? 
     base.OnStartup(e); 
    } 
} 

Sau đó, bất cứ lúc nào bạn muốn để khởi động một trong những tiểu ứng dụng trong một quy trình mới, bạn có thể làm như vậy như thế này:

public void LaunchApp2() 
{ 
    //Start a new process that is ourself and pass a command line parameter to tell 
    // that new instance to launch App2 
    Process.Start(Assembly.GetEntryAssembly().Location, "launchApp2"); 
} 
+0

Tuyệt vời! Nó có thể là những gì tôi đang tìm :) Tôi sẽ kiểm tra nó càng sớm càng tốt và tôi sẽ cho bạn biết. – DefinitionHigh

+0

Cảm ơn bạn rất nhiều! Đây chính là nó! :) BTW Tôi không wat gọi cho lớp cơ sở luôn. – DefinitionHigh

+0

Và xin vui lòng, tôi có thể đánh dấu một số cách này? ví dụ bằng cách thiết lập mô tả quy trình? Tôi muốn đặt trước nhiều trường hợp của cùng một dự án. – DefinitionHigh

0

Giả sử bạn có giải pháp với 2 dự án - một dự án biên dịch thành một ứng dụng (EXE), trong khi biên dịch thứ hai thành thư viện lớp (DLL). Tôi sẽ giả định rằng DLL có một số loại được xác định (nói, một cửa sổ) mà bạn muốn bắt đầu từ EXE.

Cách đơn giản nhất để làm điều này, đơn giản là thêm một tham chiếu đến DLL. Nhấp chuột phải vào dự án EXE trong Solution Explorer và chọn Thêm tham chiếu .... Đợi một phút trong khi hộp thoại mở ra. Từ tab Dự án, hãy chọn dự án DLL. Nhấp vào OK.

Bây giờ, trong dự án EXE của bạn, WPFWindow sẽ có sẵn dưới dạng loại được nhập. Bạn cần phải thêm một

using secondProject;

để phía trên cùng của mỗi tập tin mã có sử dụng WPFWindow. Tôi thường làm điều này tự động bằng phím tắt CTRL + Period.

Phương pháp tôi đã mô tả là phương pháp chuẩn của việc sử dụng các tệp DLL trong C#. Bạn có thể tải chúng theo cách thủ công, nhưng điều đó phức tạp hơn một chút và có thể không phải là điều bạn muốn làm.

Edit:

Alexei là đúng. Tôi nghĩ những gì chúng tôi có ở đây là XY Problem. Những gì bạn đang cố gắng làm có lẽ rất dễ dàng, nhưng cách tiếp cận (instantiating một cửa sổ được định nghĩa trong một DLL) là không.

Hãy lưu ý rằng bất kỳ mã nào bạn chạy (trong trường hợp của bạn, WPFWindow) của bạn phải bắt nguồn từ một ứng dụng, mặc dù bản thân mã được định nghĩa trong một DLL. Một DLL tự nó thường không cung cấp thông tin cho hệ điều hành về cách chạy bất kỳ mã nào có trong đó.

Cân nhắc thêm một dự án EXE khác chạy số WPFWindow mà bạn gọi bằng cách sử dụng Process.Tuy nhiên, đề xuất này có thể sai, vì chúng tôi vẫn không biết mục tiêu cuối cùng của bạn là gì. Bạn đang hỏi "Làm thế nào để tôi vỗ cánh như một con chim?" khi câu hỏi đúng có thể là "Làm thế nào để mua vé máy bay?"

+1

Nó đã được thực hiện. Tôi BIẾT LÀM THẾ NÀO ĐỂ CHẠY ỨNG DỤNG từ dự án 2. Nó được thực hiện bởi mã này: secondProject.WPFWindow win = new secondProject.WPFWindow(); win.Show(); Ai đó có thể hiểu rằng tôi đang tìm cách chạy nó trong QUY TRÌNH MỚI? – DefinitionHigh

Các vấn đề liên quan