2013-03-01 26 views
5

Tôi có một ứng dụng Windows Store sử dụng tác vụ nền. Tác vụ nền được lưu trữ trong dự án Thành phần thời gian chạy Windows. (Cấu trúc này dường như là cách duy nhất để thực hiện các tác vụ nền.)Làm cách nào để khắc phục giới hạn thành phần Windows đối với các loại thời gian chạy Windows?

Trong dự án tác vụ nền, tôi có một số phương thức công khai có thể nhìn thấy/kiểu tham số là các lớp của riêng tôi thay vì các lớp Windows Runtime.

Ví dụ:

public MyClass DoSomething() 
{ 
    return null; 
} 

Khi tôi xây dựng, tôi nhận được lỗi như sau liên quan đến những phương pháp:

Phương pháp 'X' lợi nhuận 'Y', mà không phải là một loại Windows Runtime hợp lệ. Các phương thức được tiếp xúc với Windows Runtime phải chỉ trả về các kiểu Windows Runtime.

Phương pháp 'T' có tham số 'U' kiểu 'W'. 'W' không phải là kiểu tham số Windows Runtime hợp lệ.

Tôi có thể hiểu các lỗi đang nói, nhưng tôi chưa nghĩ ra cách tốt để tôi có thể cấu trúc mã của mình để tôi đáp ứng các yêu cầu này.

Dưới đây là một số những điều tôi đã xem xét:

  1. Thay đổi dự án nhiệm vụ nền cho một dự án Windows Store Class Library. Điều này cho phép sử dụng các kiểu không chạy Windows trong các chữ ký phương thức, nhưng tác vụ nền không còn được khởi chạy nữa.
  2. Sử dụng thư viện lớp di động. Điều này không hiệu quả vì nó không có quyền truy cập vào Windows Runtime.
  3. Đối với các loại giá trị, tôi có thể chia nhỏ chúng thành Tuple s hoặc nhiều thông số, nhưng điều này có vẻ lộn xộn, ít được cấu trúc và ít bảo trì hơn. Tôi mạnh mẽ chống lại kiểu lập trình này.
  4. Đối với các lớp học, có vẻ như tôi có thể phải sao chép logic của mình trên cả hai ứng dụng. Đây là một vấn đề bảo trì rất lớn.
+1

Bạn đang thực hiện điều này một cách không cần thiết để trả lời bằng cách không hiển thị cho chúng tôi những phương pháp này trông như thế nào. Các loại tùy chỉnh yêu cầu tạo proxy, kiểm tra [câu trả lời này] (http://stackoverflow.com/a/14802799/17034). –

+0

@HansPassant: Cảm ơn! Tôi đã chỉnh sửa câu hỏi để làm cho nó rõ ràng hơn một chút. – Sam

+0

Tôi vẫn không thể thấy những phương pháp này trông như thế nào. –

Trả lời

6

Tôi đã có thể thực hiện công việc này bằng cách cách ly tác vụ nền trong dự án Thành phần Windows và di chuyển mã phụ thuộc Windows Runtime có thể sử dụng lại thành dự án Thư viện lớp Windows Store.

+0

Cảm ơn bạn đã chia sẻ giải pháp này, nó hoàn toàn hoạt động trong trường hợp của tôi. Tôi sẽ tự động tạo ra một số tệp Protocol-buffer được công khai và trả về các kiểu tùy chỉnh theo mặc định, do đó nó làm cho trình biên dịch phàn nàn về nó. Cô lập các lớp được tạo ra trong một thư viện lớp hoàn toàn cố định – fnicollet

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