ここでは、待機ハンドルを使用する非常に簡単な方法があります。取り消しコードをすべて削除した方が簡単です。HandleMessageスレッドをキャンセルする必要がない場合は、必ずしも必要ではありません。
アプリケーション1(シグナリングAPP)
public partial class MainWindow : Window
{
readonly EventWaitHandle _waitHandle =
new EventWaitHandle(false, EventResetMode.AutoReset,
"3bee6ac3-2b48-4515-82f5-4fee255a674e");
public MainWindow()
{
InitializeComponent();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
_waitHandle.Set();
}
}
アプリケーション2(シグナリングAPP)
public partial class MainWindow
{
private readonly EventWaitHandle _waitHandle =
new EventWaitHandle(false, EventResetMode.AutoReset,
"3bee6ac3-2b48-4515-82f5-4fee255a674e"); // a unique name
private readonly CancellationToken _token;
private readonly CancellationTokenSource _tokenSource;
public MainWindow()
{
InitializeComponent();
_tokenSource = new CancellationTokenSource();
_token = _tokenSource.Token;
Task.Factory.StartNew(HandleMessage, _token);
}
private void HandleMessage()
{
while(!_token.IsCancellationRequested)
{
// wait for signal - but only for 1 second
// so we can check for cancellation
if (_waitHandle.WaitOne(1000))
{
Debug.WriteLine("Message received");
}
}
Debug.WriteLine("Cancelled");
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// stop receiving
_tokenSource.Cancel();
}
}
おかげで、これは素晴らしい作品。 – SeriousSamP