小编Nik*_*a B的帖子

WinForms主窗口句柄

在我的winforms应用程序中,我试图获得一个主窗口句柄,所以我可以将它设置为我的wpf模式窗口的父级.我对winforms没有太多的经验,所以经过一些谷歌搜索我找到了两种方法来获得它.

  1. System.Windows.Forms.Application.OpenForms[0].Handle
    
    Run Code Online (Sandbox Code Playgroud)
  2. System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle
    
    Run Code Online (Sandbox Code Playgroud)

(1)似乎总是返回看似正确的相同值(至少我的模态窗口表现得如预期的那样),而(2)有时返回与(1)相同的值,但有时 - 一个完全不同的指针,似乎不起作用(我的模态窗口出现在每个其他窗口的顶部,而不仅仅是父窗口).

有人可以解释这两种方法的区别吗?有时它们会返回不同的结果,这是正常的吗?

编辑:

万一其他人想知道:一旦你得到句柄,你可以通过创建WindowInteropHelper类来使用它:

public static void SetInteropParent(this Window wpfDialogWindow, IntPtr winformsParentHandle)
{
    new WindowInteropHelper(wpdDialogWindow) { Owner = winformsParentHandle }; 
}  
Run Code Online (Sandbox Code Playgroud)

c# window-handles winforms

13
推荐指数
1
解决办法
1万
查看次数

空白DVD /蓝光光盘(IMAPI)上的可用空间

由于我原来的问题有点过于模糊,让我澄清一下.

我的目标是:

  1. 通过IMAPI选择文件系统后估计空白光盘大小
  2. 如果我刻录它,估计我的文件将在此光盘上消耗的空间.

我想知道的是什么:

  1. 是否可以以编程方式为所选文件系统获取每个扇区的字节数
  2. 如果没有,IMAPI用于不同文件系统/媒体类型的每个扇区的字节是否有默认值,并在某处记录.

.net c# imapi

8
推荐指数
1
解决办法
2578
查看次数

如何取消 WPF TabControl 中的选项卡更改

我在 SO 上发现了有关此问题的多个问题,但是我仍然无法完全获得可靠的解决方案。这是我阅读答案后得出的结论。

XML:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="300" Width="300" x:Name="this">
    <TabControl IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Tabs, ElementName=this}" x:Name="TabControl"/>
</Window>
Run Code Online (Sandbox Code Playgroud)

背后代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        var tabs = new ObservableCollection<string> {"Tab1", "Tab2", "Tab3"};
        Tabs = CollectionViewSource.GetDefaultView(tabs);
        Tabs.CurrentChanging += OnCurrentChanging;
        Tabs.CurrentChanged += OnCurrentChanged;
        Tabs.MoveCurrentToFirst();
        CurrentTab = tabs.First();
    }

    private void OnCurrentChanging(object sender, CurrentChangingEventArgs e)
    {
        //only show message box when tab is changed by user input
        if (!_cancelTabChange)
        {
            if (MessageBox.Show("Change tab?", "Message", MessageBoxButton.YesNo) == …
Run Code Online (Sandbox Code Playgroud)

c# wpf tabcontrol

5
推荐指数
1
解决办法
6865
查看次数

如何等待物品通过管道?

所以,我试图围绕微软的Dataflow库.我构建了一个非常简单的管道,只包含两个块:

var start = new TransformBlock<Foo, Bar>();
var end = new ActionBlock<Bar>();
start.LinkTo(end);
Run Code Online (Sandbox Code Playgroud)

现在我可以Foo通过调用异步处理实例:

start.SendAsync(new Foo());
Run Code Online (Sandbox Code Playgroud)

我不明白的是如何在需要时同步进行处理.我认为等待就SendAsync足够了:

start.SendAsync(new Foo()).Wait();
Run Code Online (Sandbox Code Playgroud)

但显然,只要项目被管道中的第一个处理器接受,它就会返回,而不是当项目被完全处理时.那么有没有办法等到last(end)块处理给定项目?除了WaitHandle通过整个管道.

.net c# tpl-dataflow

5
推荐指数
1
解决办法
420
查看次数

标签 统计

c# ×4

.net ×2

imapi ×1

tabcontrol ×1

tpl-dataflow ×1

window-handles ×1

winforms ×1

wpf ×1