使用Microsoft for .NET的异步CTP,是否可以捕获调用方法中异步方法抛出的异常?
public async void Foo()
{
var x = await DoSomethingAsync();
/* Handle the result, but sometimes an exception might be thrown.
For example, DoSomethingAsync gets data from the network
and the data is invalid... a ProtocolException might be thrown. */
}
public void DoFoo()
{
try
{
Foo();
}
catch (ProtocolException ex)
{
/* The exception will never be caught.
Instead when in debug mode, VS2010 will warn and continue.
The deployed the app will simply crash. …Run Code Online (Sandbox Code Playgroud) c# asynchronous exception-handling task-parallel-library async-await
我有一个标签的工具提示,我希望它保持打开,直到用户将鼠标移动到另一个控件.
我在工具提示上尝试了以下属性:
StaysOpen="True"
Run Code Online (Sandbox Code Playgroud)
和
ToolTipService.ShowDuration = "60000"
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下,工具提示仅显示5秒钟.
为什么忽略这些值?
我想知道最好的方法是"如果所有其他方法都失败了".
我的意思是,你在应用程序中处理尽可能多的异常,但仍然存在bug,所以我需要有一些东西可以捕获所有未处理的异常,这样我就可以收集信息并将它们存储在数据库中或提交它们到网络服务.
AppDomain.CurrentDomain.UnhandledException事件是否捕获了所有内容?即使应用程序是多线程的?
旁注:Windows Vista公开了本机API函数,允许任何应用程序在崩溃后自行恢复...现在无法想到名称...但我宁愿不使用它,因为我们的许多用户仍在使用Windows XP.
关闭或重置TcpClient连接的正确方法是什么?我们有软件与硬件通信,但有时出现问题,我们不再与它通信,直到我们重新启动软件.
我已经尝试强制TcpClient.Close(),甚至将其设置为null但这不起作用.只有完全重启软件才能运行.
建议?
我不能使用using关键字,因为TpcClient仅在一个位置定义,但在整个库中使用.(并且在任何给定时间只有一个连接)
它是一个处理通信的库.软件本身可以调用Controller类的ResetConnection()方法(代表硬件).
它目前看起来像
if (tcpClient != null)
{
tcpClient.Close();
tcpClient = null;
}
Run Code Online (Sandbox Code Playgroud)
现在从我在这里读到的,我应该使用tcpClient.Dispose()而不是"= null"
我会尝试一下,看看它是否有所作为.
在允许我们通过UDP/IP控制它的硬件文档中,我发现了以下片段:
在这种通信协议中,DWORD是4字节数据,WORD是2字节数据,BYTE是单字节数据.存储格式为小端,即4字节(32位)数据存储为:d7-d0,d15-d8,d23-d16,d31-d24; 双字节(16位)数据存储为:d7-d0,d15-d8.
我想知道这是如何转换为C#的?在发送之前我是否必须转换内容?例如,如果我想发送32位整数或4个字符的字符串?
我有一个列表框,我有以下ItemTemplate:
<DataTemplate x:Key="ScenarioItemTemplate">
<Border Margin="5,0,5,0"
Background="#FF3C3B3B"
BorderBrush="#FF797878"
BorderThickness="2"
CornerRadius="5">
<DockPanel>
<DockPanel DockPanel.Dock="Top"
Margin="0,2,0,0">
<Button HorizontalAlignment="Left"
DockPanel.Dock="Left"
FontWeight="Heavy"
Foreground="White" />
<Label Content="{Binding Path=Name}"
DockPanel.Dock="Left"
FontWeight="Heavy"
Foreground="white" />
<Label HorizontalAlignment="Right"
Background="#FF3C3B3B"
Content="X"
DockPanel.Dock="Left"
FontWeight="Heavy"
Foreground="White" />
</DockPanel>
<ContentControl Name="designerContent"
Visibility="Collapsed"
MinHeight="100"
Margin="2,0,2,2"
Content="{Binding Path=DesignerInstance}"
Background="#FF999898">
</ContentControl>
</DockPanel>
</Border>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如您所见,ContentControl的Visibility设置为折叠.
我需要定义一个触发器,使Visibility设置为"Visible"
当ListItem被选中时,我无法弄明白.
有任何想法吗?
更新:当然我可以简单地复制DataTemplate并向有问题的ListBox添加触发器以使用其中一个或另一个,但我想防止重复此代码.
我有一个绑定到ObservableCollection的WPF ListBox,当集合发生变化时,所有项目都会更新它们的位置.
新位置存储在集合中,但UI不会更新.所以我添加了以下内容:
void scenarioItems_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
ToolboxListItem.UpdatePositions();
lstScenario.ItemsSource = null;
lstScenario.ItemsSource = ToolboxListItem.ScenarioItems;
this.lstScenario.SelectedIndex = e.NewStartingIndex;
}
Run Code Online (Sandbox Code Playgroud)
通过将ItemsSource设置为null然后再次绑定它,UI将更新,
但这可能是非常糟糕的编码:p
建议?
我正在寻找可以用作时间线控件的东西.一种"横幅",用户可以向左或向右拖动以及时前进或后退,然后他或她应该能够在该控件上选择一个时间点.
一个奇特的日期时间选择器:-)
有任何想法吗?
c# ×5
wpf ×5
.net ×3
listbox ×2
async-await ×1
asynchronous ×1
controls ×1
data-binding ×1
endianness ×1
exception ×1
f# ×1
hardware ×1
itemtemplate ×1
module ×1
tcp ×1
themes ×1
tooltip ×1
triggers ×1
udp ×1
xaml ×1