0
2つの異なるアプリケーション間で非直列化可能なコントロールオブジェクトを共有する方法はありますか?C#で実行中のアプリケーション間で非直列化可能なコントロールオブジェクトを共有する
2つのアプリケーション間でデータを共有するために以下のコードを使用しましたが、正常に動作しています。 私の問題は、これらのアプリケーション間で直列化できないオブジェクトを共有する必要があることです。
アプリケーション
try
{
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("testmap"))
{
Mutex mutex = Mutex.OpenExisting("testmapmutex");
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream(1, 0))
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(0);
}
mutex.ReleaseMutex();
}
}
catch (FileNotFoundException)
{
MessageBox.Show("Memory-mapped file does not exist. Run Process A first.");
}
一つ
using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap", 10000))
{
bool mutexCreated;
Mutex mutex = new Mutex(true, "testmapmutex", out mutexCreated);
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(1);
}
mutex.ReleaseMutex();
string path = @"Second Application's path";
//Run second application
Process pr = new Process();
ProcessStartInfo prs = new ProcessStartInfo();
prs.FileName = path;
pr.StartInfo = prs;
bool ret = pr.Start();
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream())
{
BinaryReader reader = new BinaryReader(stream);
MessageBox.Show(String.Format("Process A says: {0}", reader.ReadBoolean()));
MessageBox.Show(String.Format("Process B says: {0}", reader.ReadBoolean()));
}
mutex.ReleaseMutex();
}
「MemoryMappedViewAccessor」の例、または2つのアプリケーション間でライブオブジェクトを共有する別の方法があります。 –
クイックインターネット検索では、[ここ](http://stackoverflow.com/questions/10806518/write-string-data-to-memorymappedfile)や[ここ](https://msdn.microsoft.com/en) -us/library/system.io.memorymappedfiles.memorymappedviewaccessor(v = vs.110).aspx)。私はあなたが私より多くの時間を費やすと、もっと多くのことがあると確信しています。 –
プロセス間でCLRオブジェクトの1つのインスタンスを自動的に共有する方法については気づきません。実際に動機付けられている場合は、共有メモリマップファイルを使用して各プロセスに存在するインスタンス間の更新を通信するラッパークラスを作成して、オブジェクトの共有をシミュレートできます。あなたの情報が複雑な場合、これは多くの作業になるかもしれません。 –