2013-03-01 7 views
5

バックグラウンドタスクを使用するWindowsストアアプリケーションがあります。バックグラウンドタスクは、Windowsランタイムコンポーネントプロジェクトに格納されます。Windowsコンポーネントの制限をWindowsランタイムタイプに克服するにはどうすればよいですか?

バックグラウンドタスクプロジェクトでは、Windowsランタイムクラスではなく独自のクラスである戻り値/パラメータタイプを持つ外部的に公開されるメソッドがいくつかあります。例えば

public MyClass DoSomething() 
{ 
    return null; 
} 

私はビルドすると、私はこのようなこれらの方法に関連して以下のようにエラーを表示:

ないメソッド「X」戻る「Y」、有効なWindowsランタイムタイプ。 Windowsランタイムに公開されるメソッドは、Windowsランタイムタイプのみを返す必要があります。

メソッド 'T' は、 'W' 型のパラメータ 'U' を有します。 'W'は有効なWindowsランタイムパラメータタイプではありません。

私はエラーの内容を理解できますが、これらの要件を満たすようにコードを構造化することはできません。 Windowsストアクラスライブラリプロジェクトにバックグラウンドタスクのプロジェクトを変更

  1. はここにいくつか私はすでに考えられてきたものです。これにより、メソッドシグネチャでWindows以外のランタイムタイプを使用することはできましたが、バックグラウンドタスクはもう起動しません。

  2. 移植可能なクラスライブラリを使用しています。これは、Windowsランタイムにアクセスできないため動作しませんでした。
  3. 値型については、Tupleまたは複数のパラメータに分割できますが、これは面倒で、構造が少なく、保守が難しいようです。私はこのタイプのプログラミングに強く反対しています。
  4. クラスの場合、両方のアプリケーションでロジックを複製する必要があるようです。これは膨大な保守性の問題です。
+1

あなたは、これらの方法がどのように見えるかを私たちに示さないことによって、これを不必要に難しくしています。カスタムタイプでは、プロキシを構築する必要があります。[この回答](http://stackoverflow.com/a/14802799/17034)をチェックしてください。 –

+0

@HansPassant:ありがとう!私はそれを少し明確にするために質問を編集しました。 – Sam

+0

私はまだこれらのメソッドがどのように見えるかわかりません。 –

答えて

6

私は、Windowsコンポーネントのプロジェクトでバックグラウンドタスクを分離し、Windowsストアクラスライブラリプロジェクトに再利用可能なWindowsランタイム依存のコードを移動することによって、この作品を作ることができました。

+0

このソリューションを共有していただきありがとうございます。私の場合は完全に機能しました。私は自動的にいくつかのプロトコルバッファファイルを生成しています。これらのファイルはパブリックであり、デフォルトでカスタム型を返すので、コンパイラはそれに不満を持ちました。これらの生成されたクラスをクラスライブラリに分離することは、 – fnicollet

関連する問題