gpt4 book ai didi

c# - 如何为 ObexListener 对象设置超时?

转载 作者:行者123 更新时间:2023-11-30 18:13:25 24 4
gpt4 key购买 nike

在执行以下行时,obexListener 对象出现问题:

ObexListenerContext context = obexListener.GetContext();

等待蓝牙传来的文件,程序收到文件后才响应。但是如果没有发送文件会发生什么?然后它会无限期地等待,我无法停止该程序。

如何实现等待时间,如果在那之后没有收到任何消息,那么操作将被取消?我留下代码:谢谢。

这是完整的代码:

private void codigo(object sender, BluetoothWin32AuthenticationEventArgs e)
{
if (!obexListener.Authenticate)
{
switch (MessageBox.Show("Desea vincular el dispositivo: " + e.Device.DeviceName.ToString(), "Atención", MessageBoxButtons.YesNo))
//switch (MessageBox.Show("PIN CODE" + e.NumberOrPasskeyAsString, "EMPAREJAMINETO", MessageBoxButtons.YesNo))
{
case DialogResult.Yes:
e.Confirm = true;
break;
case DialogResult.No:
e.Confirm = false;
break;
}
}
else
{
switch (MessageBox.Show("Desea vincular el dispositivo: " + e.Device.DeviceName.ToString(), "Atención", MessageBoxButtons.YesNo))
//switch (MessageBox.Show("PIN CODE" + e.NumberOrPasskeyAsString, "EMPAREJAMINETO", MessageBoxButtons.YesNo))
{
case DialogResult.Yes:
e.Confirm = true;
MessageBox.Show("Bienvenido Nuevamente!");
break;
case DialogResult.No:
e.Confirm = false;
break;
}
}
}

加载表单:

ObexListener obexListener = new ObexListener(ObexTransport.Bluetooth);
BluetoothWin32Authentication bluetoothWin32 = new BluetoothWin32Authentication(codigo);
Guid guid = new Guid(BluetoothService.SerialPort.ToString());
obexListener.Start();

if (obexListener.IsListening)
{
timer2.Start();
ObexListenerContext context = obexListener.GetContext();
context.Request.WriteFile(archivoBluetooth);
obexListener.Close();
}

最佳答案

这是 ObexListener 的两个扩展方法,它们将超时添加到 GetContext():

public static class ObexListenerExtensions
{
public static ObexListenerContext GetContext(this ObexListener listener, int timeout)
{
var task = Task.Run(async () => await listener.GetContextAsync(timeout));
return task.Result;
}

public static async Task<ObexListenerContext> GetContextAsync(this ObexListener obexListener, int timeout)
{
var task = Task.Run(() => obexListener.GetContext());

if (await Task.WhenAny(task, Task.Delay(timeout)) == task)
{
return task.Result;
}
else
{
throw new TimeoutException();
}
}
}

尝试将它作为非嵌套类添加到您的代码中,然后替换:

ObexListenerContext context = obexListener.GetContext();

与:

ObexListenerContext context = obexListener.GetContext(1000);

这里的 timeput 以毫秒为单位。希望对您有所帮助。

关于c# - 如何为 ObexListener 对象设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52528396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com